鱼C论坛

 找回密码
 立即注册
查看: 989|回复: 8

[已解决]size of array

[复制链接]
发表于 2020-2-21 08:14:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在c++快速入门里,小甲鱼显示的array size是4,但我试了一下显示的是8 求解答. code如下

int addArray( int array[], int n);

int main()
{
        int data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int size = sizeof(data) / sizeof(data[0]);
       
        printf("data: %d\n", sizeof(data));
       
        return 0;
}

int addArray( int array[], int n)
{
        int sum = 0;
        int i;
        printf("array: %d\n',sizeof(array));
       
        for( i=0; i<n; i++)
        {
                sum += array[i];
        }
        return sum;
}
最佳答案
2020-2-22 18:33:58
数组名作为函数参数时,传递的只是数组的首地址.因此在调用addArray函数式,局部变量array是一个int*类型数据,sizeof(array)相当于sizeof(int*).
函数参数array只能获得数组的起始地址,不能获得数组大小.这也是为什么还要单独传递一个int n用来指示数组有多少个元素了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-21 09:17:51 | 显示全部楼层
数组名相当于指针变量,不同的操作环境,大小不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-21 21:11:47 | 显示全部楼层
我并不理解你的表述
  1. int data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  2.         int size = sizeof(data) / sizeof(data[0]);//你这个size求的其实就是数组成员个数 40/4=10个
  3.         
  4.         printf("data: %d\n", sizeof(data));//你这个sizeof(data),求的是数组的长度,那应该是10*4=40
复制代码

你说的4和8是求什么得出来的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 04:41:12 | 显示全部楼层
4goodworld 发表于 2020-2-21 21:11
我并不理解你的表述

你说的4和8是求什么得出来的呢?

下面一个printf
sizeof(array)  我显示的是8 但是如果是算的指针的大小不应该是4吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 04:42:08 | 显示全部楼层
最后的魁拔 发表于 2020-2-21 09:17
数组名相当于指针变量,不同的操作环境,大小不同

是指针的大小不同吗?
上面一个printf得出的答案是一样的 都是40
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 08:11:09 | 显示全部楼层
Yakia 发表于 2020-2-22 04:42
是指针的大小不同吗?
上面一个printf得出的答案是一样的 都是40

看错了,我以为是int addArray,这个函数里的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 12:11:08 | 显示全部楼层
数组做函数参数,传递的是数组的首地址。所有。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 18:33:58 | 显示全部楼层    本楼为最佳答案   
数组名作为函数参数时,传递的只是数组的首地址.因此在调用addArray函数式,局部变量array是一个int*类型数据,sizeof(array)相当于sizeof(int*).
函数参数array只能获得数组的起始地址,不能获得数组大小.这也是为什么还要单独传递一个int n用来指示数组有多少个元素了.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-24 12:49:20 | 显示全部楼层
你定义了size变量且给它赋值  你并没有调用它啊  printf里是不是应该打印size变量 而不是sizeof(data)   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-17 00:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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