这对我来说毫无意义:
int start_tab[2];
printf("size of an array: %d\n", sizeof(start_tab));
8
为什么8? 如何使它的大小为2?
答案 0 :(得分:3)
您需要除以此类型的大小
sizeof(start_tab) / sizeof(int)
sizeof
以字节为单位给出大小,因为每个int
都是4
个字节,然后其中两个显然为8,所以你可以除以int
的大小并获得您正在寻找的价值。
答案 1 :(得分:3)
您必须执行sizeof(start_tab)/sizeof(start_tab[0])
才能获得数组中元素的数量
答案 2 :(得分:3)
请注意,sizeof
是一个操作员,而不是一个功能。 sizeof
返回提供的数据类型的大小。
为什么8?
start_tab
属于int [2]
类型,返回2 * sizeof (int)
#或8
。
如何使它的大小为2?
如果要获取数组中元素的 count ,只需将总大小除以单个元素的大小,例如
sizeof(start_tab) / sizeof(start_tab[0])
#在您的平台中,sizeof(int)
== 4。
答案 3 :(得分:2)
因为int是4
个字节...所以乘以2
会8
所以如果你想要元素大小除以sizeof(int)
。
答案 4 :(得分:2)
因为int
在您的平台上32位,即4
个字节。您有2
int
乘以32位等于64位,即8
字节。 sizeof
将以字节为单位返回数据类型的大小。
答案 5 :(得分:2)
来自C标准(6.5.3.4 sizeof和alignof运算符)
2 sizeof运算符产生其操作数的大小(以字节为单位), 它可以是表达式或类型的带括号的名称。
阵列
int start_tab[2];
占用2 * sizeof( int )
字节,因为它有两个元素,每个元素都有int
类型。因此,如果sizeof( int )
等于4
,则数组占用8
字节。
所以你有一个公式
sizeof( start_tab ) = 2 * sizeof( int )
或者一般情况下,如果数组有N个类型为T的元素,例如
T array[N];
然后
sizeof( array ) = N * sizeof( T )
或者,由于数组的每个元素都包含类型T,包括数组的第一个元素,因此您也可以编写
sizeof( array ) = N * sizeof( array[0] )
使用此公式,您可以计算N
N = sizeof( array ) / sizeof( array[0] )
或
N = sizeof( array ) / sizeof( *array )
因为*array
产生数组的第一个元素。