C语言-const修饰指针

1、常量指针:特点:指针的指向可以修改,但指针指向的值不可以改:如下:
const int* p4 = &x2;
*p4 = 20;//错误,常量指针指向的值不可以改变
p4 = &x1;//正确写法,常量指针的指向可以修改

2、指针常量:特点:指针的指向不可以改,但指针指向的值可以改变;
int* const p5 = &x2;
*p5 = 20;//正确,指针指向的值可以变
p5 = &x1;//错误:指针的指向不可以变

3、const 既修饰指针,又修饰常量:特点:指针的指向和指针指向的值都不可以变
const int* const p6 = &x2;

记忆总结:*p是指针的数值,p是指针的地址。哪个前面加const就哪个不能变

注意:

question:
const char* k = "kjsdfklsjdf";编译不报错,而 char* k= "kjsdfklsjdf";编译报错,为什么
answer:
在C语言中,字符串字面值(例如"kjsdfklsjdf")是一个常量字符数组,存储在只读的数据段。而const char* k声明的变量k是一个指向const char类型的指针变量,其值为字符串字面值的内存地址。这样的声明方式是正确的,因为它允许将常量字符串的地址赋值给指针变量,
但不允许修改指针所指向的内容。而char* k声明的变量k是一个指向char类型的指针变量,其值为字符串字面值的内存地址。此时,编译器会发出警告或报错,因为字符串字面值存储在只读的数据段,而将其地址赋值给非常量指针变量可能会导致对只读内存的修改,这是不允许的。
总之,使用const char* 声明的指针可以指向字符串字面值,而char* 声明的指针在指向字符串字面值时会导致编译器报错或警告。为了避免不必要的问题,建议在指向字符串字面值的指针变量上使用const修饰符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值