标签:就是 对比 amp 现在 注意 void turn 指针 null
void func(int *x)
{
? ? *x=2;//x是地址,*x是取地址是x的内容,
}
int main()
{
? ? int a=0;
? ? func(&a);//传递时变量a的地址
? ? return a;
}
这里实现了函数内部对变量a的值的改变;
因为传递的是a的地址,然后改变其地址所映射的内存空间的值
对于二级指针来说,不同的是传递的这个变量是地址,也即是指针型的变量
void func_1(int **x)
{
? ? int *b,c;
? ? *x=&c;
}
void func_2(int *x)
{?? ?
? ? int d;
? ? x=&d;
)
int main()
{
? ? int *a=NULL;
? ? int *b=NULL;
? ? func_1(&a);
? ? func_2(b);
? ? printf("%d? %d",a,b);
? ? return 0;
}
要在函数内部改变a的值,所以传进的应该是a的地址,形参上应该是**a,,相当于将*a看作一个整体.
对于a,里面存放的是地址,开始时NULL,现在是一个数值;而对于b,存放的也是地址,开始是NULL,后来还是NULL,因为它还是一个传递的变量,不过是一个指针型的变量而已。在运行时,子函数内部只会重新开辟一个一个临时变量来,函数结束后便销毁,所以传进去的这个指针型变量是没有发生任何变化的。
void func(int *a);表示形参是a的地址,函数内部改变了a的内容
void func(int **a);表示形参为(*a)的地址,函数内部改变了*a的内容
int *a,b,c;//表示定义了一个指针型bianliang
b=3;
a=&b;//取b的地址
c=*a;//*a表示取内容。a里存放的是b的地址,这里*a==*(&b)==b
int func(int *a);//这里的*a表示形参为a的地址,而实参则是a
int func(int **a);//这里**a表示形参为(*a)的地址,即指针型变量的地址;而实参为指针型变量a
注意:在形参里,为了区分,a才表示是指针型变量,来让人知道这是什么东西; 而在实参里,如果定义了int a之后,直接就是用 a 代表一个指针型变量。
二级指针可以类比一级指针
要传入子函数的是这个变量的地址,对于普通变量a来说,形参加个*,就表示传的是它的地址;而对于指针型变量来说,**a才表示变量为(*a)的地址
标签:就是 对比 amp 现在 注意 void turn 指针 null
原文地址:https://www.cnblogs.com/JacsonY/p/10547842.html