刚刚看完了《C和指针》,感觉自己对指针的理解应该更深了一点。今天又开始转向《C专家编程》,这一本稀里糊涂看了很多次但是并没有成为专家的书。开篇故事看得还是很不亦乐乎,遇到一个问题解释时似乎又有一点傻眼了。问题如下:
void foo(constchar **p)
{
}
int main(intargc,char **argv)
{
foo(argv);
return 0;
}
上面的代码在编译的时候会给出一个警告,具体的信息如下:
E:\WorkSpace\01_编程语言\01_C语言\exp_10>gcc exp_10.c
exp_10.c: Infunction 'main':
exp_10.c:7:6:warning: passing argument 1 of 'foo' from incompatible pointer type
foo(argv);
^
exp_10.c:1:6:note: expected 'const char **' but argument is of type 'char **'
void foo(const char **p)
^
确实,这段代码在编译的时候给出了一段警告。但是,最终代码还是能够编译成功。简单做一下分析,foo中的形参p的含义:*p是一个指向const char的指针,那么则是指向(指向const char的指针)的指针。从物理意义上进一步解释,p是一个指针,它所指向的对象是一个指向const char的地址。相应的,argv也