c语言const修饰符问题

来源:互联网 发布:淘宝降价活动 编辑:程序博客网 时间:2024/06/06 02:32

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最常用之处就是用它限定函数的形参,这样函数将不会修改实参指针所指的数据。

 

 

 

 

 

原创粉丝点击