您的位置:首页 > 编程语言 > C语言/C++

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

2011-07-17 18:24 330 查看
函数形参分为:值类型,引用类型。 值类型分为 值类型和指针函数默认是有栈大小的 函数栈默认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

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: