C语言中,数组名作为参数传递给函数时,退化为指针
2015-08-23 17:31
597 查看
C语言中,数组名作为参数传递给函数时,退化为指针
C语言中,数组名作为参数传递给函数时,退化为指针;需要数组大小时,需要一个参数传数组名,另一个传数组大小。
数组名做函数参数时,就相当于指针了。sizeof对指针操作结果应该是4。
一般函数参数为数组时,可以有两个参数,一个数组名,一个数组长度的。
首先C语言里面不支持数组作为形参来进行调用,
例如函数void fun(int a[]);里面的a实际上在进行编译时,是作为指针来处理的,所以上面的函数完全等价于void fun(int *a);
所以当你利用sizeof的时候返回的将是int指针的内存字节数,所以当你想知道数组长度的时候只能做这样的函数了,void fun(int *a,size_t n);
来自:http://blog.sina.com.cn/s/blog_63c78ecb01018mii.html
************************************************************************************************************************************
数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首地址,如 fun (char[8]),fun(char [])都等价于 fun(char*)~~
在C++里传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小。
如果想在函数内知道数组的大小,需要这样做:进入函数后用memcpy将数组复制出来,长度由另一个形参传进去~~
代码如下:
fun (unsigned char *p1,int len)
{
unsigned char* buf = new unsigned char[len+1];
memcpy(buf,p1,len);
}
来自:程序员面试宝典
相关文章推荐
- C,C++开源项目中的100个Bugs
- [LeetCode] Insert Interval
- Effective C++ 条款19 设计class犹如设计type
- C语言学习
- 2016年阿里C/C++开发笔试程序题三
- hdu5418 最短哈密顿回路
- C++的构造函数和析构函数
- C++中的单例模式
- c++ STL unique , unique_copy函数
- 2016年阿里C/C++开发笔试程序题一
- C++ STL vector(向量容器)的使用(附完整程序代码)
- C++学习——vector
- gcc连接文件error: /usr/lib64/libstdc++.so.6: version 'GLIBCXX_3.X.XX‘ not found
- Effective C++ 条款18 让接口容易被正确使用,不易被误用
- [LeetCode] Merge Intervals
- 浅谈C++设计模式之抽象工厂(Abstract Factory)
- C++:构造函数和析构函数能否为虚函数
- C++类中的const和static
- C++中数字与字符串之间的转换
- 关于C语言中函数调用和参数传递机制的探讨