一般指针和指向指针的指针
详见代码
#include <stdio.h> void func(int *p, int *a) //p是一个局部变量,*p是p指向的地址处的变量 { *p = 10; p = a; //局部变量,只能在函数体中改变p的指向。作用范围是func函数 *p = 100; } void printfunc() { int x = 0, *p, a[3]={1, 2, 3}; p = &x; printf("%d-%d\n",p,a); func(p, a); printf("%d-%d\n",p,a); printf("%d-%d-%d-%d", x, *p, a[0], a[1]); } void fun(int **p, int **a) { *p = *a; //改变了外层p的地址,p原来指向x,现在指向a[0] } void printfun() { int x = 0, *p, a[3]={1, 2, 3}; p = &x; int *q = a; printf("%d-%d-%d\n", p, q, a); fun(&p, &q); printf("%d-%d-%d\n", p, q, a); printf("%d-%d-%d-%d", x, *p, a[0], a[1]); } int main() { printfunc(); printf("\n"); printfun(); return 0; }
结果:
1638128-1638112
1638128-1638112
10-10-100-2
1638128-1638112-1638112
1638112-1638112-1638112
0-1-1-2 Press any key to continue