c/C++ 函数参数返回值的深入理解

函数形参分为:值类型,引用类型。 值类型分为  值类型和指针

函数默认是有栈大小的 函数栈默认1-2M编译器自动分配,作用参数压栈,函数返回值临时变量创建。函数递归时断点保护,变量保护。

由此可以大致计算函数可以递归调用的次数。

例如下面的程序

struct stuStudent
{
    int num[1024]; 
};   
void print(stuStudent b)
{
    cout<<a<<endl;
    a++;
    print(b);
     
 }     
int main()  
{  
 
    stuStudent st;
    cout<<sizeof(st)<<endl;
    system("pause");
    print(st);
    system("pause");
    return 0;
}  
此函数递归调用500次 500*1024*4 = 2M
其次你还需要明白下面的几点:
先把编译和运行时搞清楚!
形参没空间,只是为了确定原型,以便在函数调用时,为实参分配空间做准备 **************
实参在运行时堆栈中分配空间,如果是数组,传递的是指针//
局部变量的话,一般是不分配空间的,它们位于寄存器中
局部数组的话,空间是预先分配的,位于数据段中,调用函数时(此函数中定义),才将数组拷贝至运行时堆栈
当然,你声明成static就不copy了   
那么你在看看下面的程序:
vector<int> Inited()
{
    vector<int> ve;
    for(int i =0;i<1024*1024*10;i++)
      ve.push_back(i);
    return ve; 
} 
int main()  
{  
    
    vector<int> ve = Inited();
    system("pause");
    return 0;
}  

这个程序在调用过程中不会出现任何问题。
关键就在vector这个数据结构中,他内部有个数组的首指针。是动态管理内存的,分配在堆上面的,所以没有问题
可以这样验证cout<<sizeof(ve); 结果输出12 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值