实参char ** 和形参const char** 不相容

#include <stdio.h>

 

 

void foo(const char **p);

 

 

int main()

{

         char ch[2][20] = { "Hello world", "Hi"};

         char** p = (char**)ch;

 

         foo(p);

 

         return 0;

}

 

 

 

void foo(const char **p, int n)

{

}

 

 

Error          1       error C2664: 'foo' : cannot convert parameter 1 from 'char **' to 'const char **'

 

因为:原型:指向const  char 的指针的指针

           实参:指向char 的指针的指针

 

由于char ** 和 const char** 都是没有限定符的指针类型,即const 并不是修饰指针,所以前者指向char *,后者指向const char*,因此是不相容的。

 

 

但是char *和const char *是相容的,因为前者是指向没有限定符的char指针,后者指向的是有const 限定符的char的指针,而char 类型和char 类型是相容的。

 

 

posted @ 2012-12-10 17:57  Anbit自由之路  阅读(909)  评论(0编辑  收藏  举报