浅谈char **p与const char **p赋值问题

本文探讨了C语言中关于`char **p`与`const char **p`赋值的问题。通过分析ANSI C标准,解释了赋值操作时类型匹配的规则,特别是`const`关键字在指针类型中的作用。文章指出,`const`修饰的是指针所指的对象,而非指针本身,并举例说明了不同类型指针间的赋值限制。
摘要由CSDN通过智能技术生成

前段时间闲来无事就翻看了一下C专家编程,在第一章1.9 阅读ANSI C标准,寻找乐趣和裨益中作者给出了下面代码:

foo(const char **p) { }
main(int argc, char **argv)
{
     foo(argv);
}

 上面代码在编译时会发出警告:argument is incompatible with prototype(参数与原型不匹配) 

其实在平时中我们更常见的是

char *cp
const char *ccp
ccp = cp
上面代码在编译时是没有警告的,对此我们提出疑惑,上述两种有什么不同吗?对此刚开始我很疑惑,然后上网找了个很多发现大家都是把原文直接复制下来了,没有加入的解释部分,呜呼。。。下面是自己的见解,欢迎大家交流交流


首先标准指出了参数传递类似于赋值,其次对于赋值操作,需满足下面条件左边操作数所指向的类型与右边操作数所指向的类型相同,左操作数所指向的类型必须有右操作数所指向类型的限定符(提示书中描述“必须满足下列条件之一”,此处书中进给出了一个条件其他条件未给出,意思就是要满足下面条件,大家不要在这个地方晕了)


对于第二个代码,首先左右操作数都指向了char类型,其次右操作数无限定符,所以符合

对于第一个代码,左右操作数指向的类型不同,左操作数指向c

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值