数组名与指针
在A文件有如下定义:
char *p = "china!";
在文件B有如下声明
extern char p[];
那么在B文件中的p,如果在B文件该声明的后面再使用时,编译器是把p按数组名来看待,还是按一个普通指针变量来看待。
《C专家编程》4.3.2节有这样有这样一段话:
“现在让我们看一下当一个外部数组的实际定义是一个指针,但却以数组的方式对其引用时,会引起什么问题,需要对内存进行直接的引用,但这时编译器所执行的是却是对内存进行间接引用,之所以如此,是因为我们告诉编译器我们拥有的是一个指针”
我怎么看着晕啊。 到底原文件是按数组定义还是指针定义,声明又是按什么声明的啊?声明后的p又是按什么来对待啊?
请高手赐教!
问题点数:0、回复次数:5Top
1 楼xjyr(先活着)回复于 2006-03-07 10:29:45 得分 0
是我学的太好了么?
期待中。。。。。。。。。Top
2 楼nila(昵拉)回复于 2006-03-09 17:16:20 得分 0
*p = p[];Top
3 楼xiuren(xiuren)回复于 2006-03-10 04:19:23 得分 0
声明后p就是按照一个指向数组的指针来对待的Top
4 楼terryjwf(开大奔的帅哥)回复于 2006-03-10 12:45:38 得分 0
char *p = "china!";
此时并没有给p分配空间,只是让p指向china的首地址,故所以对内存是间接引用。
当char p[] = "china!";时,对内存是直接引用。故定义和声明需要匹配,即:
char *p = "china!";
extern char *p;
或者:
char p[]="china!";
extern char p[];
这样就匹配了!Top
5 楼wumingchenchao(一缕阳光)回复于 2006-03-16 19:11:29 得分 0
我也看的晕,标记先Top




