C++中的char*和字符串常量

        碰到一个关于char*和字符串的问题,发现以前使用的时候没有很深入的了解,因此做一个总结。

        这段代码最后输出的是“test”,但是第一次看的时候感觉func里面传入的地址按道理应该修改的p所指的内存,因此输出的应该是“abc”。同时p是一个char*的指针,为什么可以使用p=“test”这样的操作?不应该报类型不匹配吗?

查询资料发现问题的关键是因为:在C语言中字符串常量的本质表示其实是一个地址!!

(参考csdn博客:深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别)

        因此不难理解,第一次的p=“test”是给char*类型的p地址。func传入的确实是p的地址但是func函数内部的p指针并没有修改mian中的p所指的内容,因为也没有*这样的解引用。同时字符串类型为const char[]类型,因此也无法修改字符串地址中的内容。func中的p指针相当于先拿到了main中的p的地址然后在函数里面重新指向了“abc”的地址。但是func走完之后func函数中的局部变量p也就释放了,因此main中的p所指的位置没有影响,输出也就是“test”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值