『踩坑记录』char* str = "hehe";和char str[] = "hehe";的区别

本篇博客介绍char* str = “hehe”;和char str[] = “hehe”;的区别。

首先,我们来看一个代码

int main() {
	char* str1 = "hehe";
	char* str2 = "hehe";

	char str3[] = "hehe";
	char str4[] = "hehe";

	printf("str1 = %p\n", str1);
	printf("str2 = %p\n\n", str2);

	printf("str3 = %p\n", str3);
	printf("str4 = %p\n", str4);

	return 0;
}

我们再来看一下运行结果
在这里插入图片描述
从上面运行结果可以看出,str1和str2指向的是同一块区域

下面,我们将代码调整一下,我们去修改一下字符串的内容来看一下

int main() {
	char* str1 = "hehe";
	char* str2 = "hehe";

	char str3[] = "hehe";
	char str4[] = "hehe";

	printf("str3: %s\n", str3);
	str3[0] = 'H';
	printf("str3: %s\n\n", str3);

	printf("str1: %s\n", str1);
	str1[0] = 'H';
	printf("str1: %s\n", str1);

	return 0;
}

运行结果如下
在这里插入图片描述
为什么第四个printf没有执行结果,我们来调试一下
在这里插入图片描述
可以看到,在对str1指向的字符串进行修改的时候发生了访问冲突,这是为什么呢

这里,我们介绍一下char* str1 = "hehe";char str3[] = "hehe";区别

  • str1指向的字符串是存放在常量区的,所以str1和str2指向的是同一个字符串。常量区中的字符串具有只读属性,是不可被修改的;
  • str3指向的字符串是存放在栈上的,所以str3和str4分别在栈上开了一段空间,来存储"hehe"字符串。是可读可写的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值