Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40456
  • 博文数量: 21
  • 博客积分: 825
  • 博客等级: 准尉
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-06 18:08
文章分类

全部博文(21)

文章存档

2011年(1)

2010年(20)

我的朋友

分类: C/C++

2010-07-08 15:31:04


void fun(const char** str){
}

void main(int argc,char **argv){
     fun(argv);
}

这样的参数传递是否正确了。在c专家编程里讲述了这个问题,测试了下,gcc会发出警告。

解释如下:
合法的赋值形式必须满足以下条件之一:
两个操作数都是指向限定符或无限定符的相容类型的指针,左边指针所指向的类型必须具有右边指针指向的类型的全部限定符。

比如:const char * a; char *b="abc".这个时候 a = b 是可以的,比较左右的操作数a是带有限定符const,b是带有空限定符,所以左边的限定符包含右边所有的限定符。在看定义,const char *a 是指指向带有限定符const的char型指针,const是修饰char的。char *b是指指向char型的指针。const char 和 char是兼容的。所以a = b 符合规则。

但如果是const char **a;char **b;上面的赋值(a = b)就很难说清了。const char **a是指指向带有const限定符的char型的指针的指针,这个时候const修饰的一个char型的指针。同样的道理 char **b是一个不带限定符的指针的指针。然而const char*  和 char* 是不相容(虽然const char 和 char相容),所以上面的赋值a = b是不能通过的,但也许在有的编译器里没有太大的要求,只是发出警告而已。
阅读(6044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~