在C语言的复杂声明中有指向指针的指针:例如:char ** argv;
首先:要明白一个概念,就是无论是指针变量的声明:char *argc;还是指向指针的指针变量的声明:char ** argv;它们所声明的变量是指的:argc和argv,前面的 * 或者 ** 都是作为修饰符来声明指针变量的。
所以对于指向指针的指针变量声明 char **argv,是指:声明了一个指针变量argv,它存放的值是一个地址,这个地址指向了一个char类型的指针变量。比如拿上面个的 char *argc 来说,argc是一个char类型的指针变量,则可以有:argv=&argc。这样就把argc这个指针变量的地址存到了argv这个变量里面。
一个简单的例子:
#include<stdio.h>
void main(){
char **argv;
char *argc;
//char a='a';
char b='b';
argc=&b;
//*argc=b;
argv=&argc;
printf("%c\n",**argv);
printf("%p\n",&b);
printf("%p\n",argc);
printf("%p\n",&argc);
printf("%p\n",argv);
}
运行结果 :
从结果可以看出:最后一个输出,先从argv这个变量的值找到指针变量argc的地址:0050FC74
然后根据argc这个变量的值找到char变量:b的地址:0050FC6B
最后,通过b输出char型值:b。