我如何确定C中数组的大小?

我如何确定C中数组的大小?

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


执行摘要:

int a[17];
size_t n = sizeof(a)/sizeof(a[0]);

要以字节为单位确定数组的大小,可以使用sizeof运算符:

int a[17];
size_t n = sizeof(a);

在我的电脑上,整数是4个字节,所以n是68。

为了确定数组中元素的数量,我们可以将数组的总大小除以数组元素的大小。 你可以用类型来做到这一点,就像这样:

int a[17];
size_t n = sizeof(a) / sizeof(int);

并得到正确的答案(68/4 = 17),但如果类型a改你将有一个讨厌的错误,如果你忘了改变sizeof(int)为好。

因此,首选的除数是sizeof(a[0]) ,即数组的zeroeth元素的大小。

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);

如果您正在处理未作为参数接收的数组,则sizeof方式是正确的。 作为参数发送给函数的数组被视为指针,所以sizeof将返回指针的大小,而不是数组的大小。

因此,这个方法在函数内部不起作用。 相反,总是传递一个额外的参数size_t size指示数组中元素的数量。

测试:

#include <stdio.h>
#include <stdlib.h>

void printSizeOf(int intArray[]);
void printLength(int intArray[]);

int main(int argc, char* argv[])
{
    int array[] = { 0, 1, 2, 3, 4, 5, 6 };

    printf("sizeof of array: %dn", (int) sizeof(array));
    printSizeOf(array);

    printf("Length of array: %dn", (int)( sizeof(array) / sizeof(array[0]) ));
    printLength(array);
}

void printSizeOf(int intArray[])
{
    printf("sizeof of parameter: %dn", (int) sizeof(intArray));
}

void printLength(int intArray[])
{
    printf("Length of parameter: %dn", (int)( sizeof(intArray) / sizeof(intArray[0]) ));
}

输出(在64位Linux操作系统中):

sizeof of array: 28
sizeof of parameter: 8
Length of array: 7
Length of parameter: 2

输出(在32位Windows操作系统中):

sizeof of array: 28
sizeof of parameter: 4
Length of array: 7
Length of parameter: 1

值得注意的是, sizeof在处理衰减为指针的数组值时没有帮助:即使它指向数组的开始,对编译器来说,它与指向单个元素的指针相同阵列。 指针不会“记住”有关用于初始化它的数组的任何其他内容。

int a[10];
int* p = a;

assert(sizeof(a) / sizeof(a[0]) == 10);
assert(sizeof(p) == sizeof(int*));
assert(sizeof(*p) == sizeof(int));
链接地址: http://www.djcxy.com/p/79815.html

上一篇: How do I determine the size of my array in C?

下一篇: Retrieve system information on MacOS X?