char* 和char[]的区别

参考了: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"字符串,字符串常量就相当于字符的一个数组,是可以修改的。

发布了26 篇原创文章 · 获赞 6 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/wangdonghao137/article/details/44750417