什么时候形参不得不用n重指针

先回答当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重指针;

 

如果函数要改变 父环境指针变量所指向的内存空间的内容,则不需要传它的地址,直接传这个指针的值即可,

这一点新手学习的时候容易晕头;再次强调一下;

 

 

posted @ 2012-09-14 21:50  庄庄庄  阅读(239)  评论(0编辑  收藏  举报