C 函数值传递和指针传递的效率问题
2016-05-14 17:02
253 查看
C 函数值传递和指针传递的效率问题
C中有两种传递,值传递和指针(地址)传递。值传递需要把数据的一份拷贝传递入函数形参表,并存储在栈中,函数返回后弹出栈,拷贝被删除。而指针传递则不然。如果形参表是指针,那么函数在执行时会直接去指针指向的地址中获取此数据并操作,而不用直接拷贝。看下这个例子:const int ARRAY_SIZE = 20; typedef struct { long long array[ARRAY_SIZE]; } Data; void fun1(Data data) { printf("%d\n", data.array[0]); } void fun2(Data const *data) { printf("%d\n", data->array[0]); }
这个结构体占据的空间很大。如果调用fun1,就不得不在栈中存储一份很大的拷贝,用后删除。而fun2却不用这样的浪费空间,直接去指向的地址中访问数据。但是注意,指针传递下一切作用效果对源数据有效。所以,对于这样只读取不改写的情况,我们最好选择后者,并用const修饰指针以增强程序安全性,从而减少空间的浪费。
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 关于指针的一些事情
- 如何写好 C main 函数
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua和C语言的交互详解
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法