`
stephen830
  • 浏览: 2968314 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用数组做参数的一个陷阱(sizeof)

 
阅读更多

使用数组做参数的一个陷阱(sizeof)

 

转载自 : http://www.cnblogs.com/kadinzhu/archive/2011/04/11/2012865.html

 

今天在写一个小程序的时候,发现下面这个现象:

 

#include <stdio.h>

int get_size(char a[]) {
return sizeof(a);
}

int main(void) {
char a[20];

printf("In main, size of a is: %d\n", sizeof(a));
printf("In get_size, size of a is: %d\n", sizeof(a));
return 0;
}

 

 

本以为输出结果会是两个20, 但是实际输出的结果是20和4。

原因是数组作为参数传递的时候,实际上传递的是数组的首地址,也就是一个指针,所以get_size函数返回的结果是一个指针的大小。

 

 

因而,如果将数组作为参数传递的同时,必须将数组的长度同样传递到函数中。

 

 

分享到:
评论

相关推荐

    个人整理sizeof()用法汇总

    个人整理sizeof()用法汇总 sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组... 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4}

    从一维数组看sizeof和strlen

    本文介绍了了数组的长度问题,在使用sizeof()和strlen()时的不同之处。

    内存的堆分配和栈分配&字符数组,字符指针,Sizeof总结[参考].pdf

    内存的堆分配和栈分配&字符数组,字符指针,Sizeof总结[参考].pdf

    指针数组和数组指针的区别.doc

    []优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。这里执行p+1是错误的,这样赋值也是错误的:p=a;因为p是个不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],...

    C++sizeof使用规则及陷阱分析

    主要讲解了sizeof的概念,以及各种情况下使用的方法,还有使用sizeof容易错误的地方,希望对大家有所帮助

    第6章数组指针与字符串.

    6-2 在数组A[20]中第一个元素和最后一个元素是哪一个? 解: 第一个元素是A[0],最后一个元素是A[19]。 6-3 用一条语句声明一个有五个元素的整型数组,并依次赋予1~5的初值。 解: int a[5] = { 1, 2, 3, 4,...

    MFC源代码 SIZEOF.02

    MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 SIZEOF.02MFC源代码 ...

    解析sizeof, strlen, 指针以及数组作为函数参数的应用

    本篇文章是对sizeof, strlen, 指针以及数组作为函数参数的应用进行了详细的分析介绍,需要的朋友参考下

    sizeof用法

    详细解释了sizeof用法,包括函数入口参数,数组与sizeof之间的用法。包括sizeof的概念、sizeof的使用方法、sizeof与其他操作符的关系、sizeof与指针之间的关系等

    C语言查找数组里数字重复次数的方法

    本文实例讲述了C语言查找数组里数字重复次数的方法。分享给大家供大家参考。具体如下: #include stdafx.h #include #include using namespace std; int main() { int myarray[10]={4,3,7,4,8,7,9,4,3,6}; ...

    计算整形数组中前N个点的最近距离

    计算一个数组中前2.3.4.5.。。。。。sizeof(array)的最近距离,使用了动态规划算法,欢迎各位下载,手机模拟端亲测,

    php检测数组长度函数sizeof与count用法

    在php检测数组长度的函数有sizeof count 下面看个简单实例: 复制代码 代码如下:$colorlist = array(“apple”=&gt;”red”, “grass”=&gt;”green”,”sky”=&gt;”blue”,”night”=&gt;”black”,”wall”=&gt;”white”); echo...

    9.第九章 数组.txt

    (1)使用具有N个元素的数组时,引用下标为0~N-1,第一个元素为数组名[0],最后一个元素为数组名[N-1]。数组名代表起始地址,下标代表从起始地址开始偏移几个元素,第一个元素偏移0,第N个元素偏移N-1,下标为N-1。 ...

    C++ sizeof 使用规则及陷阱分析

    对于s1,首先把a放到8的对界,假定是0,此时下一个空闲的地址是1,但是下一个元素d是double类型,要放到8的对界上,离1最接近的地址是8 了,所以d被放在了8,此时下一个空闲地址变成了16,下一个元素c的对界是4,16...

    sizeof 和strlen 区别.pdf

    总结sizeof 和strlen的区别: ...该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

    字符数组和字符串的sizeof( )和strlen().pdf

    。。。

    字符数组和字符串的sizeof( )和strlen().docx

    。。。

    C++中灵活数组结构的使用

    C99中结构中的后一个元素是未知大小的数组称为灵活数据结构成员,但是结构中的灵活...  一个使用灵活数组的示例如下: #include // 定义一个灵活数组 typedef struct StType {  int count;  int item[0]; }

    详细讲解sizeof的使用

    讲解sizeof的使用,以及使用时容易遇到的一些常见问题。

Global site tag (gtag.js) - Google Analytics