str1="abcdef"这种写法是不对的,因为str1是数组名,而数组名不可以作为左值,这是书上的说法
但书上同时又说,可以用数组的名字作为指向数组第一个元素的指针。并且书上还举例如下:
for(p=&a[0];XXXXXXX;XXXXXX)
可以替换为
for(p=a;XXXXXXX;XXXXX)
那么问题来了,str1不能是指针吗?按书上的说法char *p
p=“abcdef”是可以的,这代表p指向了字符串的第一个元素。
一个是数组定义,一个是赋值定义,两个方式不同
哦,我明白了,,,声明p的时候,p只是指针并不是数组名,所以可以作左值,,,,str1虽然可以是指针但它是指向数组第一个元素的指针,这个是不能变的,所以不能作左值。。。
这是两种不同的方式,需要仔细分析
char*str1="abcdef"这是直接定义定义声明,再编译阶段str1会被赋值字符串对应的地址;
char *p
p=“abcdef”这种是不行的,这是复制运算,运行时需要处理的,“abcdef”不是地址;
你可以理解这两种情况是在不同时期被处理的,机制不一样。
数组名在有些情况下是整个数组,比如:sizeof求数组长度、有些情况下是首元素的地址
数组名是指针常量,不可以放在等号左边。
定义的指针是指针变量,可以放在等号左边。
懂了吗?