15.指针深入学习_D【郝斌C语言入门学习】
多级指针

例题1:
1 # include <stdio.h> 2 int main(void) 3 { 4 int i = 10; 5 int * p = &i; 6 int ** q = &p; 7 int *** r = &q; 8 // r = &p;//错误,因为r是int ***类型,r只能存放int ** 类型的地址 9 printf("i = %d\n", ***r); 10 return 0; 11 }
例题2:
# include <stdio.h> void f(int ** q) { //*q就是p } void g() { int i = 10; int * p = &i; f(&p); } int main(void) { return 0; }
跨函数使用内存
例题1:静态分配内存不能跨函数使用
1 # include <stdio.h> 2 void f(int ** q)//q是个指针变量,无论q是什么类型的指针变量,都只占4个字节 3 { 4 int i = 5; //静态变量不能跨函数使用 5 //*q 等价于p 6 *q = &i; 7 } 8 int main(void) 9 { 10 int *p; 11 f(&p); 12 printf("%d\n", *p);//本语法没有问题,但逻辑上有问题,因为i变量在f()函数终止时已经被释放。 13 return 0; 14 }
例题1:动态分配内存可以跨函数使用
1 # include <stdio.h> 2 # include <malloc.h> 3 void f(int ** q) 4 { 5 int * pArr = (int *)malloc(sizeof(int)); 6 //函数中用malloc方法动态分配内存可以跨函数使用,而函数中静态分配内存在本函数终止即被释放 7 *pArr = 300; 8 *q = pArr; 9 } 10 int main(void) 11 { 12 int * p; 13 f(&p);//跨函数修改p的值,必须发送p的地址才能修改 14 printf("%d\n", *p); 15 return 0; 16 } 17 /* 18 在vc++6.0中的输出结果:300 19 main()函数通过指针变量p访问f()函数动态分配空间,这就是跨函数使用内存空间的实例。 20 */

浙公网安备 33010602011771号