zoukankan      html  css  js  c++  java
  • C语言中,数组名作为参数传递给函数时,退化为指针

    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);

    }

    来自:程序员面试宝典

  • 相关阅读:
    HTML学习笔记-框架(40)
    HTML学习笔记-使用div和table进行布局(36)
    MVC初体验-EF系列(总结)(23)
    MVC初体验-EF系列(延迟加载)(22)
    MVC初体验-EF系列(状态跟踪的修改)(21)
    MVC初体验-EF系列(CRUD)(20)
    回收站清空后立马恢复
    软件体验记录
    复杂网络,抽象语法树
    PHP修改记录
  • 原文地址:https://www.cnblogs.com/bendantuohai/p/4752838.html
Copyright © 2011-2022 走看看