B选项定义一个存储在栈中的10字节的字符型数组,没有赋值,但是数组名一定是一个指向这个栈数组首元素的常指针,p也因此只能是右值!!!!所以b=.....;就是不对的,你可以更改*b,但是不能更改b的指向。
其次,“HELLO!”是常量字符串,它永远都只能存储在内存的常量区,所以b= ” dddd ” ;是让b改变指向;
当char b[]= ” “HELLO!”;这种初始化;其实是两步;“HELLO!”当然还是存储在常量区,所以
编译器先拷贝一份到栈中,然后执行strcpy(b,“HELLO!”);