题目:常量字符串与数组存字符串类比

#include<stdio.h>
int main()
{
	char str1[] = "hello everyone";
	char str2[] = "hello everyone";
	char *str3 = "hello everyone";
	char *str4 = "hello everyone";
	if (str1 == str2)//注意这里比的是起始地址,不是内容,比内容要用strcmp
	{
		printf("str1和str2两者相同\n");
	}
	else
	{
		printf("str1和str2两者不同\n");
	}
	if (str3 == str4)
	{
		printf("str3和str4两者相同\n");
	}
	else
	{
		printf("str3和str4两者不同\n");
	}
	return 0;
}

请问以上代码输出结果是什么?






上面的代码中,str1和str2均为数组,str3和str4均为常量字符串。
我们知道数组str1和str2是分别开辟了一块内存空间,虽然存储的字符串一致,但地址是不同的,所以第一个应该是str1和str2两者不同
在这里插入图片描述

str3和str4是两个相同的常量字符串,它们是不能被更改的,所以它们不可能重复创建,即如果开辟两个相同的常量字符串,那么它们共同指向的是同一块内存中的首元素地址。所以第二个应该是str3和str4两者相同
在这里插入图片描述
在这里插入图片描述
那么看到这里就有个小问题了,用指针指向常量字符串,如果强制用指针进行修改它,明明不让改的东西被强改了岂不是很危险?

const char *str="hehe";
所以建议在前面加上const防止被篡改
  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值