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语言中,数组名作为参数传递给函数时,退化为指针的更多相关文章

  1. C++ 数组长度 以及 数组名作为参数传递给函数 以及 为什么不在子函数中求数组长度

    在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有 ...

  2. C语言 数组做函数参数退化为指针的技术推演

    //数组做函数参数退化为指针的技术推演 #include<stdio.h> #include<stdlib.h> #include<string.h> //一维数组 ...

  3. C语言中数组名作为参数进行函数传递

    用数组名作函数参数与用数组元素作实参有几点不同. 1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的.因此,并不要求函数的 ...

  4. go语言中strings包中的Trim函数的作用是什么

    答:Trim函数原型如下: func Trim(s string, cutset string) string 去掉字符串s中首部以及尾部与字符串cutset中每个相匹配的字符,如: s=" ...

  5. C语言中math.h中常用的函数

    1.绝对值 ①函数原型: int abs(int x); 函数功能: 求整数x的绝对值 int number=-1234; abs(number); ②函数原型:double fabs(double ...

  6. C语言学习笔记(一):数组传递时退化为指针

    这几天闲来无事,写了一个数组元素排序函数如下: #include <stdio.h> #include <stdlib.h> void ArraySort(int array[ ...

  7. C语言中sizeof()的用法

    语法 sizeof有三种语法形式: 1.sizeof(object); //sizeof(对象); 2.sizeof(type_name); //sizeof(类型); 3.sizeof object ...

  8. C语言中static修饰符的意义

    在C语言中,static通常有2种含义:1)定义变量的生命周期:2)定义变量或者函数的作用域. 变量的生命周期是指,相对于程序运行的进程生命周期,变量存在的时间段.变量的生命周期由变量的存储类型(位置 ...

  9. C语言中if语句

    C语言if语句后面的表达式 C语言中if关键字之后(即括号内)均为表达式. 该表达式通常是逻辑表达式或关系表达式,但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量,这些变量的值都换算成了逻辑 ...

随机推荐

  1. 【P1835】小红花

    很简单的题,然而我没想到,在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题: Fj在圣诞节来临之际,决定给他的奶牛发一些小红花.现在Fj一共有N头奶牛,这N头牛按照编 ...

  2. kuangbin_ShortPath R (HDU 4370)

    出题人真是脑洞堪比黑洞 (然后自己也被吸进去了 理解一遍题意 三个条件可以转化为 1的出度是1, n的入度是1, 2~n-1的出度等于入度 不难发现1-n的最短路符合题意 然而其实还有另一种情况 1为 ...

  3. C++@类的静态成员变量和静态成员函数

    参考: http://blog.csdn.net/morewindows/article/details/6721430 http://www.cnblogs.com/lzjsky/archive/2 ...

  4. C++@sublime GDB调试

    正文转自:http://www.cppblog.com/lucency/archive/2012/08/09/59214.html 之前在网上搜索了好久使用sublime调试C和C++的文章,但是徒劳 ...

  5. Windows Git+TortoiseGit简易使用教程

    转载自 http://blog.csdn.net/jarelzhou/article/details/8256139 官方教程:http://tortoisegit.org/docs/tortoise ...

  6. Android TextView内容过长加省略号,点击显示全部内容

    在Android TextView中有个内容过长加省略号的属性,即ellipsize,用法如下: 在xml中:android:ellipsize="end"    省略号在结尾an ...

  7. c++中的dictionary对象:map的使用备忘

    #include <map> #include <iostream> using namespace std; void main(){ map <string, int ...

  8. PHP正则匹配邮件地址、URL

    匹配邮件 #^[A-Za-z0-9]+[\w\.-]*@[A-Za-z0-9]+[A-Za-z0-9\.-]*[A-Za-z0-9]$# 注意 1. \w 表示的是 [A-Za-z0-9_] 包括下划 ...

  9. ABBYY FineReader出现错误代码258

    ABBYY FineReader 12OCR文字识别软件能够快速方便地将扫描纸质文档.PDF文件和数码相机的图像转换成可编辑.可搜索的文本,包括Word.Excel.文本文档.PPT等格式,受到不少用 ...

  10. navicat for mysql 10.1.7注册码

    最近提示用的navicat for mysql 10.1.7过期了.网上翻了一翻,发现了一个可用的注册码,分享出来.多一个链接,给别人多一份选择 姓名,组织随意, 注册码都是:NAVN-LNXG-XH ...