要站在内存的角度看c语言。
int main()
{
//全局区存放一份“aaaa”,然后再把“aaaa”拷贝到栈区分配的20个字节空间内
char buf[20]="aaaa";
//全局区存放一份“bbbb”,然后再把“bbbb”拷贝到栈区分配的5个字节空间内
char buf2[] = "bbbb";
//全局区存放字符串,再把字符串首地址赋给p1
char *p1 = "111111";
//首先在堆区分配100个字节内存空间,然后在栈区分配4个字节的变量p2,存放首地址
char *p2 = malloc(100);
//把字符串拷贝到p2所指向的内存空间
strcpy(p2, "3333");
}
指针变量p1,p2在栈区,而它们所指向的字符串在只读区。
而buf【20】 = ”addsdf“,buf在栈区分配内存,可以修改。
void main()
{
char *p = "abcd";
char p1[] = "abcd";
p[2] = 'e';//p是一个指向常量区数据的指针,不能修改常量区的内容
p1[2] = 'd';//而p1[]是一个字符数组,在栈上分配内存,可以修改
system("pause");
}