C函数调用 | 指针篇
参数传递
指针的问题一直很重要,结合函数的caller,callee在理解一下
函数调用
本质上,是按值传递的,即将函数外的变量值复制一份放到函数的栈区,调用结束完之后会进行清栈操作,但是会有返回值保存到eax寄存器中,也就是我们常说的return 0;
这样的语句
普通变量
由于对于一般变量,callee与caller中的变量是分开的,即调用函数不会对原变量产生影响。
int a=3;
fun(int a)
{
a-=1;
}//fun 结束后栈清空,a的值仍为3
一级指针
传入的变量是地址,解引用可以改变变量的实际的值
int a=3;
int *p=&a;
fun(p)
{
*p-=1;
}//fun 结束后栈清空,a的值为2
二级指针
一级指针可以解决函数外变量的改变,却无法回传地址(修改指针),而这时考虑二级指针
zer0_1s