详见代码
#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
",p,a);
func(p, a);
printf("%d-%d
",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
", p, q, a);
fun(&p, &q);
printf("%d-%d-%d
", p, q, a);
printf("%d-%d-%d-%d", x, *p, a[0], a[1]);
}
int main()
{
printfunc();
printf("
");
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