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

二级指针

一级指针可以解决函数外变量的改变,却无法回传地址(修改指针),而这时考虑二级指针

posted @ 2022-04-24 11:18  zer0_1s  阅读(86)  评论(0编辑  收藏  举报