楼主问问题比较多,我只说下我的看法。
(1)声明 int **p;
变量p是一个指针,而它所指向的类型是一个整型指针,这样就定义了一个指向指针的指针。
而int *q;
变量q是一个指针,它所指向的类型是一个整型,所以不能用来定义一个指向指针的指针。
q的值是一个地址,而*q表示的是q所指向的地址中的值。
(2)*q是一个值而不是一个地址。
(3)多嵌套一层,应该是要多加一个*。其实*表示的是取变量所指向的地址存储的数值。
(4)指针变量的地址和普通变量的地址是相同的。使用指针更加灵活。这个你使用多了就知道了。
(5)可以用整型变量来装地址,理由跟你说得差不多,但是一般不这么用。
这里我写的程序,你看看,希望对你有帮助。
#include
int main()
{
int **p, *q, k=10;
#if 0
q = &k;
p = &q;
printf("%d\n",**p);
#endif
#if 1
// 初始化指针,如果不初始化后面将出错。
q = (int *)malloc(sizeof(int *));
p = (int **)malloc(sizeof(int **));
*p = (int *)malloc(sizeof(int *));
*q = k;
**p = *q;
printf("%d\n",**p);
// 分配了地址,记得及时释放。
free(q);
free(*p);
free(p);
#endif
return 0;
}
063指针的引入和定义
是的,你自己定义的是几重指针,必须自己很清楚,编译器只判断你使用时是否合法。你不知道嵌套几层就没法用,这就是C的规则,必须遵循。另外通常指针最多用到三重,一般不会再高了。
C语言是一个强类型语言,如果不强制转换的话,那么它就一直代表一种类型。
你要去你朋友的朋友家,你得先找你朋友,你朋友再去找他那个朋友。你要问为什么我不能和我要找的那个人成为朋友,因为程序很大,如同现实生活一样,你不可能和所有人成为朋友。
要了解一个知识最好的方法是去用它而不是想它。
你又问“我是不是要提前知道这个指针是多少层的”,当你用一个三层的指针时,你肯定是要用它指向二层的指针,这个二层的指针或许是你函数的参数,总之它就在你周围。