【发布时间】:2015-06-18 17:48:14
【问题描述】:
我在一篇微软文章中阅读了以下信息;
https://support.microsoft.com/en-us/kb/44463
下面的文字展示了一个常见的编程错误示例,即混淆了数组和指针声明: 考虑一个分为几个模块的应用程序。在一个模块中,声明一个数组如下:
signed char buffer[100];在另一个模块中,声明以下变量以访问数组:
extern signed char *buffer; // FAILS extern signed char buffer[]; // WORKS如果您在 CodeView 调试器中查看代码,则表明
*buffer声明产生的地址与buffer[]声明产生的地址不同。
但我不明白为什么我们不能使用
*buffer访问该数组 我们可以使用buffer[]访问它。有人请解释一下这两种类型有什么区别?
【问题讨论】:
-
这必须是重复的
-
我一直交替使用它们。获取不同的地址对我来说毫无意义。
-
好的,指针和数组不一样。你试图告诉编译器在它是一个数组时寻找一个指针
-
简而言之:解引用指针比访问数组间接。由于额外的间接性,使用指针声明的代码(当标识符是数组时)会爆炸。在 Peter van der Linden 的 “专家 C 编程 - 深度 C 的秘密” 中有一个非常清楚的解释。