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

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


当前回答

对于预定义数组:

 int a[] = {1, 2, 3, 4, 5, 6};

计算数组中的元素数量:

 element _count = sizeof(a) / sizeof(a[0]);

其他回答

#define SIZE_OF_ARRAY(_array) (sizeof(_array) / sizeof(_array[0]))

sizeof函数返回数组在内存中使用的字节数。如果你想计算数组中的元素数量,你应该用数组的sizeof变量类型除以这个数字。让我们说int array[10];,如果变量类型integer在你的计算机是32位(或4字节),为了得到你的数组的大小,你应该做以下工作:

int array[10];
size_t sizeOfArray = sizeof(array)/sizeof(int);

要知道在代码中显式声明并由其变量引用的固定数组的大小,可以使用sizeof,例如:

int a[10];
int len = sizeof(a)/sizeof(int);

但这通常是没有用的,因为你已经知道答案了。

但如果你有一个指针,你不能使用sizeof,这是一个原则问题。

但是…由于数组是作为线性内存提供给用户的,如果您知道最后一个元素地址,并且如果您知道类型的大小,那么您就可以计算它有多少个元素。例如:

#include <stdio.h>

int main(){
    int a[10];
    printf("%d\n", sizeof(a)/sizeof(int));
    int *first = a;
    int *last = &(a[9]);
    printf("%d\n", (last-first) + 1);
}

输出:

10
10

另外,如果你不能利用编译时,你可以:

#include <stdio.h>

int main(){
    int a[10];
    printf("%d\n", sizeof(a)/sizeof(int));
    void *first = a;
    void *last = &(a[9]);
    printf("%d\n", (last-first)/sizeof(int) + 1);
}

对于预定义数组:

 int a[] = {1, 2, 3, 4, 5, 6};

计算数组中的元素数量:

 element _count = sizeof(a) / sizeof(a[0]);
sizeof(array) / sizeof(array[0])