参考了:http://blog.csdn.net/yahohi/article/details/7427724
在编码过程中发现了一个以前一直默认的错误,同样的char *c = "abc"和char c[]="abc",前者改变其内
容时程序是会崩溃的,而后者则完全正确。
void TestCharPoint()
{
char* a="abc";
char c[]="hig";
char *pa,*pc;
pa=a;
pc=c;
printf("%s,%s,%s,%s\n",a,c,pa,pc);
//while(*pa!='\0')
//{
// *pa='1';//error 写入冲突,因为pa等价于a,a是指向常量字符串,对常量字符串进行修改肯定会报错
// pa++;
//}
while(*pc!='\0')
{
*pc='1';//ok,pc等价于c,c指向的是变量字符串,变量可修改
pc++;
}
printf("%s,%s,%s,%s\n",a,c,pa,pc);
}
常量就是固定不变的量,不能通过函数进行修改的变量;
变量是可以通过赋值,函数等手段进行修改的一个变量。
字符串常量:char *a = "hello world";首先,操作系统在编译器规划内存方案中的的文字常量区分配一段内存,存储"hello world"字符串,然后在栈区分配一个内存,存储"hello world"字符串所在内存的首地址,字符串常量一旦分配是不允许修改的。
字符常量:char b[] = "hello world";操作系统在编译器规划的内存方案中的栈区分配一段连续内存空间(12个字节),存储"hello world"字符串,字符串常量就相当于字符的一个数组,是可以修改的。