在C语言中,内存可以划分为3种,堆、栈、静态存储区。
栈:就是auto变量存放区域,自动释放,在编译的时候需要知道空间大小。(如int a = 10;)
堆:一般用作开辟动态存储区,需要人工开辟,人工释放,可以在运行时开辟。(如malloc()和free()函数)
静态存储区:这个区域存放一些常量,不能改变值。(如#define NUMBER 100)
char *p = "Test string";
*p = "string is changed";
这句话本身就是错的,首先字符串不能那样赋值。p指向一个字符,而不是整个一行。
就算换成
*p = 'P';
也是不对的,因为 char *p = "Test string"; 的意思是静态存储区放入"Test string",然后再栈开辟一个指针p,指向这个字符串。
也就是说p在栈中,而其指向的字符串在静态存储区中,所以能改变p指针的指向,但是不能改变其指向的值。