C语言中,char a[] = "abc"; char *p = "cdef";

a是一个数组名,代表的是字符串的第一个地址,那么p也是指向一个字符串的首地址,那么a与p在使用上应该是一模一样的?所有的函数对它们的写法都是一样的?
但是我相信肯定是有区别的?想知道这里a与p的区别是什么?

char a[] = "abc"; 中a是数组名,编译时为其分配4个char单元,前3个单元用“abc"中的字符对应初始化,最后一个存放'\0';char *p = "cdef";在编译时先生成"cdef"字符串常量,存放在常量区,并将首地址(c的地址)赋给char *型指针变量p。从以上可见,a是数组,所以其中的元素abc都可变,可以重写;而p指向的是常量,不可更改。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-11-01
区别就在于,数组名a和指针变量p虽然本质上都是地址,但是数组名a它的地址是不变的,即它是一个常指针,指向是固定不变的;但是指针p是个指针变量,它的指向是可以改变的,你可以将a的地址赋值给p,即p=a;那么指针p就指向了数组a的首元素地址了,但是数组名a它在赋值语句中是不能做左值的,因为它是一个常指针,和一个常量没什么区别。
第2个回答  2013-12-22

;这是对应的写法

第3个回答  2013-12-22
a[]定义是一个字符串数组,*p定义的是一个字符串常量。数组名a是一个常量,指针p是一个变量,当用作指针时,都能使用a+1,p+1,但是p++正确,a++错误,
通过a能改变数组里的元素的内容,但是不能通过p来改变它指向的字符串,因为常量是不能更改的。a[2]=d正确,p[2]=d错误
第4个回答  2013-12-22
sizeof(a)=4 sizeof(p)=4 这里不一样
相似回答