当初学c语言总感觉数组名和指针之间有种说不清道不明的关系,两者很像,但是又有着解释不清的区别。
比如定义:
char a[]=”hello”;
char *p=”hello”;
同:
都可以用名字输出字符串首地址
printf(“%p %p\n”,a,p);
都可以用名字输出字符串内容
printf(“%s %s\n”,a,p);
都可以用下标操作
a[1] 和 p[1]都对应字符串第1个字符
最大的不同:
p + 1 和 a+1 都对应第一个字符的地址
但是:
可以执行 p = p + 1 或 p = a + 1;
却不可以执行 a = a + 1;
即,赋值运算的左操作数不能是数组名
分析
为了方便,用8086汇编来说明一下:
数组名和变量名都可以看作汇编语言里的标号,如下:
只需要关注第9、10、20行即可
(1)对应的内存空间大小不一样
第9行定义了6个字节的大小(即数组),第10行定义了2个字节(即标号p对应的空间)。
char *p = “hell