复杂的指针往往让人不知道是个什么东西,写多了会迷糊,所以我想了个这样的法子
char*p[3]={"qwertyuiop","qwe","qwer"};
char*(*pp)[3]=&p;
printf("%s\n",p);
printf("%s\n",pp);
上面的那个是一个指针数组,下面的pp是p的地址,我一直记得指针的类型是所指向的类型加上*,去掉变量名就是指针的类型了,但是按这个道理,p的类型是char*[3],pp的类型是char*(*)[3]
于是我干脆输出的时候选择了根本不可能的类型,只去编译,是这样的warning
"format '%s' expects argument of type 'char *', but argument 2 has type 'char **'
"format '%s' expects argument of type 'char *', but argument 2 has type 'char * (*)[3]'
终于发现原来p是一个二级指针,这就解答了之前的疑惑
所以碰到复杂的指针的时候不妨去使用%d之类的来输出,看看编译的warning是什么就好了