如何以C来确定数组的大小?

如何以C来确定数组的大小?

如何以C来确定数组的大小?

也就是说,数组可以容纳的元素数?


摇曳的蔷薇
浏览 1010回答 3
3回答

慕的地6264312

执行摘要:int a[17];size_t n = sizeof(a)/sizeof(a[0]);全文答覆:若要确定数组的大小(以字节为单位),可以使用sizeof操作员:int a[17];size_t n = sizeof(a);在我的计算机上,INT是4个字节长,所以n是68。要确定数组中的元素数,可以将数组的总大小除以数组元素的大小。你可以用这个类型来做,就像这样:int a[17];size_t n = sizeof(a) / sizeof(int);得到正确的答案(68/4=17),但如果a如果您忘记更改sizeof(int)也是。因此,首选除数是sizeof(a[0])数组的零元素的大小。int a[17];size_t n = sizeof(a) / sizeof(a[0]);另一个优点是,您现在可以轻松地参数化宏中的数组名称,并获得:#define NELEMS(x)  (sizeof(x) / sizeof((x)[0]))int a[17];size_t n = NELEMS(a);

aluckdog

这个sizeof路是对的敌我您正在处理未作为参数接收的数组。作为参数发送给函数的数组被视为指针,因此sizeof将返回指针的大小,而不是数组的大小。因此,在函数内部,此方法不起作用。相反,始终传递一个附加参数。size_t size指示数组中的元素数。测试:#include&nbsp;<stdio.h>#include&nbsp;<stdlib.h>void&nbsp;printSizeOf(int&nbsp;intArray[]);void&nbsp;printLength(int&nbsp;intArray[]);int&nbsp;main(int&nbsp;argc,&nbsp;char*&nbsp;argv[]){ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;array[]&nbsp;=&nbsp;{&nbsp;0,&nbsp;1,&nbsp;2,&nbsp;3,&nbsp;4,&nbsp;5,&nbsp;6&nbsp;}; &nbsp;&nbsp;&nbsp;&nbsp;printf("sizeof&nbsp;of&nbsp;array:&nbsp;%d\n",&nbsp;(int)&nbsp;sizeof(array)); &nbsp;&nbsp;&nbsp;&nbsp;printSizeOf(array); &nbsp;&nbsp;&nbsp;&nbsp;printf("Length&nbsp;of&nbsp;array:&nbsp;%d\n",&nbsp;(int)(&nbsp;sizeof(array)&nbsp;/&nbsp;sizeof(array[0])&nbsp;)); &nbsp;&nbsp;&nbsp;&nbsp;printLength(array);}void&nbsp;printSizeOf(int&nbsp;intArray[]){ &nbsp;&nbsp;&nbsp;&nbsp;printf("sizeof&nbsp;of&nbsp;parameter:&nbsp;%d\n",&nbsp;(int)&nbsp;sizeof(intArray));}void&nbsp;printLength(int&nbsp;intArray[]){ &nbsp;&nbsp;&nbsp;&nbsp;printf("Length&nbsp;of&nbsp;parameter:&nbsp;%d\n",&nbsp;(int)(&nbsp;sizeof(intArray)&nbsp;/&nbsp;sizeof(intArray[0])&nbsp;));}输出(在64位Linux操作系统中):sizeof&nbsp;of&nbsp;array:&nbsp;28sizeof&nbsp;of&nbsp;parameter:&nbsp;8Length&nbsp;of&nbsp;array:&nbsp;7Length&nbsp;of&nbsp;parameter:&nbsp;2输出(在32位Windows操作系统中):sizeof&nbsp;of&nbsp;array:&nbsp;28sizeof&nbsp;of&nbsp;parameter:&nbsp;4Length&nbsp;of&nbsp;array:&nbsp;7Length&nbsp;of&nbsp;parameter:&nbsp;1

慕码人2483693

值得注意的是sizeof在处理已衰变到指针的数组值时,没有帮助:即使它指向数组的开始,但对编译器来说,它与指向该数组的单个元素的指针相同。指针不会“记住”用于初始化它的数组的任何其他内容。int&nbsp;a[10];int*&nbsp;p&nbsp;=&nbsp;a;assert(sizeof(a)&nbsp;/&nbsp;sizeof(a[0])&nbsp;==&nbsp;10);assert(sizeof(p)&nbsp;==&nbsp;sizeof(int*));assert(sizeof(*p)&nbsp;==&nbsp;sizeof(int));
打开App,查看更多内容
随时随地看视频慕课网APP