C/C++函数参数的类型

函数传参问题一直是一个难点,很多地方没懂会导致很多的问题,所以这里我将总结一下
函数的参数类型
函数的参数类型有:值,地址,引用
首先我们要知道在main函数里调用其他函数时,会在栈里开辟一段空间,最开始入栈的是当前代码的下一行代码的地址,然后依次是形参,函数的局部变量,函数的代码在代码段,当函数返回时,释放栈空间,最后出栈的是下一行代码的地址,又回到了main函数里函数开始的地方继续执行,很多人这个时候回提出一个问题,为什么栈里的变量释放了,函数还可以返回呢?这是因为编译器会为函数生成一个临时变量,用来存放函数的返回值,这里后面会详细讲到
1.值传递
这是实参把值传给形参,先看下一个程序

#include <stdio.h>
int fun(int a)
{  
    a++;
    printf("a=%d\n",a);
    return a;
}
int main(int argc, char const *argv[])
{
   int var=5;
   fun(var);
   printf("var=%d\n",var); 
   return 0;
}

结果为

[root@localhost gongxiang]# ./a.out
a=6 
var=5

这是一个很简单程序,fun函数的目的是var++,但是结果并没有让var++,而是形参a++,如果形参++,对于我们的程序是没有任何意义的,这是因为值传递时只是传递了实参的值给形参,用实参初始化形参,就相当于在调用fun函数时,首先进行的是 a=var;然后对a++,var的值当然不会有变化
2.地址传递
对于上面的程序可以改写

#include <stdio.h>
int fun(int *a)
{  
    (*a)++;
    printf("*a=%d \n",*a);
    return *a;
}
int main(int argc, char const *argv[])
{
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值