c语言const修饰符问题

foo(const char  **p){};

main(int argc, char ** argv)

{

        foo(argv);

}

 

warning: argument is incompatible with prototype

 

ANSIC:6.3.2.2

每个实参应该有自己的类型,这样它的值可以赋值给与它对应的形参类型的对象

ANSIC:6.3.16.1

两个操作数都是指向有限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针所指向类的全部限定符

 char *与const char *匹配

char * p;

const char *ccp;

ccp = cp;

原因:

1.左操作符(ccp)是一个指向有const限定符的char类型的指针,const限定符修饰的char类型(指针指向的类型)而不是修饰指针的

2.右操作符(cp  )是一个指向没有限定符的char类型的指针

3.char类型与char类型是相容的,左操作符所指向的类型具有右操作符所指向类型的限定符,再加上自身的限定符(const)

char ** 与const char **不匹配

 

char ** p;

const char **ccp;

ccp = cp;

 

原因:

1.ccp是一个指向有const限定符char类型的指针的指针;

2.cp是一个指向限定符char类型的指针的指针;

3.cp和cpp指向的类型不相同。

 

关键字const不能把变量变为常量,在一个符号前加上const限定符只是表示符号不能被赋值,就是它的值对于这个符号是只读的,但它并不能防止通过程序的内部的方法来修改这个值。

const最常用之处就是用它限定函数的形参,这样函数将不会修改实参指针所指的数据。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值