深入指针笔记二
有代码如下:char a[]="How are you"; char *p="How are you"; *(a+1)='A';//可以 *(p+1)='A';//不可以
在程序中,为什么*(a+1)='A'可行,而*(p+1)='A'不可行呢?
因为在程序中,数组的字符串存放位置是在栈内存中,而指针指向的字符的存放位置是在堆内存中,
在内存布局中,栈内存的分配是可变的,而堆内存是不可变的,就有了*(a+1)='A';是没有错误,
并且可以分配成功,它只是在栈中,数组的后面再分配一个字节的空间而已,而*(p+1)='A'是错误的
在于它要在p指针变量指向的堆内存中分配一个字节的内存来存放'A',然而,堆的大小一旦确定了,
就不能再改变了,所以这么写会出现错误!