C语言 – 如何在C中确定数组的大小?

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

也就是说,阵列可以容纳的元素数量是多少?


执行摘要:

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

如果您正在处理未作为参数接收的数组,那么这种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: %d\n", (int) sizeof(array));
    printSizeOf(array);

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

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

void printLength(int intArray[])
{
    printf("Length of parameter: %d\n", (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
Tags:, ,

添加评论

友情链接:蝴蝶教程