Yakia 发表于 2020-2-21 08:14:48

size of array

在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);
       
        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;
        }
        return sum;
}

最后的魁拔 发表于 2020-2-21 09:17:51

数组名相当于指针变量,不同的操作环境,大小不同

4goodworld 发表于 2020-2-21 21:11:47

我并不理解你的表述
int data[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
      int size = sizeof(data) / sizeof(data);//你这个size求的其实就是数组成员个数 40/4=10个
      
      printf("data: %d\n", sizeof(data));//你这个sizeof(data),求的是数组的长度,那应该是10*4=40
你说的4和8是求什么得出来的呢?

Yakia 发表于 2020-2-22 04:41:12

4goodworld 发表于 2020-2-21 21:11
我并不理解你的表述

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

下面一个printf
sizeof(array)我显示的是8 但是如果是算的指针的大小不应该是4吗

Yakia 发表于 2020-2-22 04:42:08

最后的魁拔 发表于 2020-2-21 09:17
数组名相当于指针变量,不同的操作环境,大小不同

是指针的大小不同吗?
上面一个printf得出的答案是一样的 都是40

最后的魁拔 发表于 2020-2-22 08:11:09

Yakia 发表于 2020-2-22 04:42
是指针的大小不同吗?
上面一个printf得出的答案是一样的 都是40

看错了,我以为是int addArray,这个函数里的

Cool_Breeze 发表于 2020-2-22 12:11:08

数组做函数参数,传递的是数组的首地址。所有。。。

major_lyu 发表于 2020-2-22 18:33:58

数组名作为函数参数时,传递的只是数组的首地址.因此在调用addArray函数式,局部变量array是一个int*类型数据,sizeof(array)相当于sizeof(int*).
函数参数array只能获得数组的起始地址,不能获得数组大小.这也是为什么还要单独传递一个int n用来指示数组有多少个元素了.

te___amo 发表于 2020-2-24 12:49:20

你定义了size变量且给它赋值你并没有调用它啊printf里是不是应该打印size变量 而不是sizeof(data)   
页: [1]
查看完整版本: size of array