18878977809 发表于 2023-9-22 11:50:57

请问下数组问题

若有定义inta[]=(1,2,3,4,5,6,7,8,9};则表达式 sizeof(a)/sizeof(a)的值为

小甲鱼 发表于 2023-9-22 11:50:58

首先,你的数组定义有一些错误。在C语言中,如果你想定义一个二维数组,你应该这样做:

int a[] = {{1,2},{3,4},{5,6},{7,8},{9,0}};
这里我把最后的一个元素补充为0,因为我们是在每个子数组里放入两个元素。

然后,sizeof(a)会得到整个数组的大小(以字节为单位),而sizeof(a)会得到一个子数组(也就是a的一个元素)的大小(以字节为单位)。

在大多数系统上,一个int是4字节。所以一个子数组的大小是 2 * sizeof(int),也就是8字节。

假设整个数组a的大小是N * sizeof(int),那么数组a有N / 2个子数组(每个子数组两个元素)。因此,sizeof(a) / sizeof(a)就会得到子数组的数量,也就是5。

所以,对于你的数组,表达式sizeof(a) / sizeof(a)的值为5。

isdkz 发表于 2023-9-22 11:51:05

该表达式的值为9。

该数组的定义为inta[],表示一个二维数组,其中第一维的大小没有指定,第二维的大小为2。根据初始化列表,该数组实际上被初始化为一个包含9个元素的一维数组,其中每个元素都是一个含有两个int类型的数组。

因此,sizeof(a)将返回整个数组的大小,即9个元素乘以每个元素的大小(2个int类型,即8字节),即9*8=72字节。sizeof(a)将返回数组中第二个元素的大小,即两个int类型,即8字节。因此,sizeof(a)/sizeof(a)将得到9。

18878977809 发表于 2023-9-22 11:54:31

正确答案是5,是系统在9后面补了一。个0,刚好组成5个长度为2的一维数组吗?

桃花飞舞 发表于 2023-9-22 15:09:34

本帖最后由 桃花飞舞 于 2023-9-22 15:14 编辑

5,   10 / 2,a={1,2,3,4,5,6,7,8,9};a 是整个数组的所有元素长度,a是两个元素的长度
页: [1]
查看完整版本: 请问下数组问题