博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C 语言关于函数参数是数组的一个bug
阅读量:3949 次
发布时间:2019-05-24

本文共 666 字,大约阅读时间需要 2 分钟。

话不多说,先看代码!

#include
#include
int array(int arr[]) { int size = sizeof(arr) / sizeof(arr[0]); printf("size = %d\n", size);}int main() { int a[4] = { 1,2,3,4 }; array(a); system("pause"); return 0;}

简简单单的代码,判断一下数组长度,猜猜看?如果你觉的结果是4,那你就错了。结果如下

结果是 1,惊不惊喜。原因是,在 C 语言中,如果函数的参数是一个数组,那么这个数组会隐式的转换为指针,返回去,你在想想,一个数组的指针的大小是几个字节呢?int 型,4个字节,然后除以一个数组元素的大小,刚好结果是一。接下来,我改变一下代码。

#include
#include
int array(int arr[],int size) { int x = size; printf("size = %d\n", x);}int main() { int a[4] = { 1,2,3,4 }; array(a, sizeof(a) / sizeof(a[0])); system("pause"); return 0;}

我在函数的外边就计算了数组的长度,然后当作一个参数传进函数,这一次结果就对了!

所以说,把数组当作参数传进函数,数组会隐式的变为指针!

 

转载地址:http://tqwzi.baihongyu.com/

你可能感兴趣的文章
1020 月饼 (25 分)
查看>>
1021 个位数统计 (15 分)
查看>>
1022 D进制的A+B (20 分)
查看>>
1023 组个最小数 (20 分)
查看>>
1024 科学计数法 (20 分)
查看>>
1025 反转链表 (25 分)
查看>>
1026 程序运行时间 (15 分) (floor函数)
查看>>
1029 旧键盘 (20 分)
查看>>
Prime Ring Problem HDU - 1016 ( 搜索DFS )
查看>>
棋盘问题 POJ - 1321 ( 搜索 DFS)
查看>>
非常可乐 HDU - 1495 ( 搜索 BFS )
查看>>
2698:八皇后问题 OpenJ_Bailian - 2698 ( 搜索 DFS )
查看>>
2754:八皇后 OpenJ_Bailian - 2754 ( 搜索 DFS )
查看>>
1027 打印沙漏 (20 分)
查看>>
1028 人口普查 (20 分)
查看>>
Numbers HDU - 5585
查看>>
1030 完美数列 (25 分)
查看>>
1031 查验身份证 (15 分)
查看>>
1032 挖掘机技术哪家强 (20 分)
查看>>
1033 旧键盘打字 (20 分)
查看>>