C语言中,数组名做为参数传递给函数时,退化为指针

C语言中,数组名做为参数传递给函数时,退化为指针;须要数组大小时,数组

须要一个参数传数组名,另外一个传数组大小。函数


数组名作函数参数时,就至关于指针了。sizeof对指针操做结果应该是4。
  通常函数参数为数组时,能够有两个参数,一个数组名,一个数组长度的。

首先C语言里面不支持数组做为形参来进行调用,指针

例如函数void fun(int a[]);里面的a实际上在进行编译时,是做为指针来处理的,因此上面的函数彻底等价于void fun(int *a);内存

因此当你利用sizeof的时候返回的将是int指针的内存字节数,因此当你想知道数组长度的时候只能作这样的函数了,void fun(int *a,size_t n);编译器

 

数组做为参数传给函数时,传的是指针而不是数组,传递的是数组的首地址,如 fun (char[8]),fun(char [])都等价于 fun(char*)~~编译

在C++里传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小。语言

若是想在函数内知道数组的大小,须要这样作:进入函数后用memcpy将数组复制出来,长度由另外一个形参传进去~~参数传递

代码以下:new

fun (unsigned char *p1,int len)参数

{

unsigned char* buf = new unsigned char[len+1];

memcpy(buf,p1,len);

}

相关文章
相关标签/搜索