鱼C论坛

 找回密码
 立即注册
查看: 826|回复: 4

[已解决]数组形参的长度为什么变为了2

[复制链接]
发表于 2020-7-21 23:44:59 | 显示全部楼层 |阅读模式
9鱼币
  1. #include<stdio.h>

  2. void func(int array[])
  3. {
  4.         printf("Length of array in func is %d\n", sizeof(array)/sizeof(array[0]));
  5.         return;
  6. }

  7. int main()
  8. {
  9.         int array[] = {0, 1, 2, 3, 4, 5, 6};
  10.         printf("Length of array in main is %d\n", sizeof(array)/sizeof(array[0]));
  11.         func(array);
  12.         return 0;
  13. }
复制代码

运行以上程序,发现array传入func后长度变短了(总是会变为2),为什么???
最佳答案
2020-7-21 23:45:00
数组作为函数参数自动退化为指针

最佳答案

查看完整内容

数组作为函数参数自动退化为指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-21 23:45:00 | 显示全部楼层    本楼为最佳答案   
数组作为函数参数自动退化为指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 06:41:33 | 显示全部楼层
本帖最后由 baige 于 2020-7-22 06:48 编辑

func函数的array是指针,指针8个字节,array[0]4个字节,8/4=2
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 08:18:24 | 显示全部楼层
如果要使用数组长度,就要传入数组的长度(当然,形参也得改),
不然真没办法,毕竟C把数组名视为数组地址(虽然节省内存),sizeof(array)得到的是指针长度
  1. #include<stdio.h>
  2. const int ArrSize = 7;

  3. void func(int array[], int ArrSize)
  4. {
  5.     printf("Length of array in func is %d\n", ArrSize);
  6.     return;
  7. }

  8. int main()
  9. {
  10.     int array[ArrSize] = { 0, 1, 2, 3, 4, 5, 6 };
  11.     printf("Length of array in main is %d\n", sizeof(array) / sizeof(array[0]));
  12.     func(array, ArrSize);
  13.     return 0;
  14. }
复制代码

这是我改的,你看行吗

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
Unicorn# + 2 + 2 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-22 10:07:52 | 显示全部楼层
livcui 发表于 2020-7-22 08:18
如果要使用数组长度,就要传入数组的长度(当然,形参也得改),
不然真没办法,毕竟C把数组名视为数组地 ...

我就想要个最佳啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 11:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表