c语言中指针数组易错的一个地方
2013-08-23 12:57 zhanjl 阅读(237) 评论(0) 收藏 举报定义一个字符数组 char a[9] = "abcdefgh"
现在取c = a[i]
编译器符号表中有一个地址9980
运行时步骤一:取i的值,将它和9980相加
运行时步骤二:取出地址(9980+i)处的内容

如果定义char *p = "abcdefgh"
取c = p[i]
编译器符号表中p的地址为4624
运行时步骤一:取出地址4624的内容为5081
运行时步骤二:计算5081+i,得到新地址
运行时步骤三:取出地址(5081+i)处的内容

所以假如在文件一种定义char a[9] = "abcdefgh"
而在文件二中声明extern char *a;
然后再使用a[i]时,编译器会把a认为是一个指针,然后采用上面的指针三个步骤操作,首先取出第一个字符,然后把该字符加上i当做地址,很明显会发生错误。
所以在文件二中必须声明为一个字符数组extern char a[];
天道酬勤,厚德载物
浙公网安备 33010602011771号