浅谈字符字面量的地址

在C和C++的世界里,我们允许字面量直接出现在表达式中,常用的字面量分为两种:字符字面量和数字字面量,比如:

const char* sl = "hello world";
int a = 42;

在上面的例子中,hello world42都是字面量,因为他们没有任何的变量和它对应,直接以值的形式出现在表达式中。

它们两者虽都是字面量,但是他们两者有一个非常本质的区别,那就是字符字面量有自己的地址而数字字面量没有。个人理解的原因是,C/C++语言中并没有内置字符串这种类型,字符字面量实际上是char这种内置类型的一个序列,我们没有办法原子操作字符串,所有关于它的操作都需要借助指针来完成。在上面这个例子中:int a = 42实际上把42这个值给了a这个变量,而const char* sl = "hello world"则是把"hello world"这个字面量在内存中的地址,给了sl这个指针变量【1】。

那么,同一个字符字面量的值,地址会是一样的吗?也就是说下面这个例子的输出到底是s什么:

const char* s1 = "Hello world";
const char* s2 = "Hello world";

std::cout << std::bool
  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值