先回答当n=2的情形,一句话回答:
当要通过一个函数来改变 指针变量的值 的时候,就必须把这个指针变量的地址 作为实参,传递给函数;
这个时候,这个函数所接收到的变量 当然就是 二重指针!
典型的例子有:
long int strtol(const char *nptr, char **endptr, int base);
char *p;
char *str = "200/300"
int n = strtol(str, &p, 10);
这第二个参数就是要把指针变量p的赋值为字符'/'所在的地址;
还有
char *strtok_r(char *str, const char *delim, char **saveptr); // 这个函数非标准库函数,linux一般都有
char *save, *p;
char buf[100] = "200/300";
p = strtol(buf, "/", &save);
这个同上,还是把save的值赋值为字符'/' 所在的地址;
--------------------------------
总之一句话,C函数都是拷贝变量值传递给函数,当函数要改变父环境的变量,就必须接收这个变量的地址,所以:
当函数要改变一个n重指针(栈区的指针本身是个变量)的值,形参就必然是n+1重指针;
如果函数要改变 父环境指针变量所指向的内存空间的内容,则不需要传它的地址,直接传这个指针的值即可,
这一点新手学习的时候容易晕头;再次强调一下;