如何确定C语言中数组的大小?
也就是说,数组可以容纳多少元素?
如何确定C语言中数组的大小?
也就是说,数组可以容纳多少元素?
当前回答
sizeof函数返回数组在内存中使用的字节数。如果你想计算数组中的元素数量,你应该用数组的sizeof变量类型除以这个数字。让我们说int array[10];,如果变量类型integer在你的计算机是32位(或4字节),为了得到你的数组的大小,你应该做以下工作:
int array[10];
size_t sizeOfArray = sizeof(array)/sizeof(int);
其他回答
您可以使用sizeof操作符,但它不适用于函数,因为它将接受指针的引用。 您可以执行以下操作来查找数组的长度:
len = sizeof(arr)/sizeof(arr[0])
代码最初在这里找到:
查找数组中元素个数的C程序
int size = (&arr)[1] - arr;
点击这个链接了解解释
对于预定义数组:
int a[] = {1, 2, 3, 4, 5, 6};
计算数组中的元素数量:
element _count = sizeof(a) / sizeof(a[0]);
除了已经提供的答案,我想指出一个特殊的情况下使用
sizeof(a) / sizeof (a[0])
如果a是char、unsigned char或signed char的数组,则不需要使用sizeof两次,因为带有这些类型的一个操作数的sizeof表达式的结果总是1。
引用自C18,6.5.3.4/4:
当sizeof应用于具有char类型、unsigned char类型或signed char类型(或其限定版本)的操作数时,结果为1。
因此,如果a是char、unsigned char或signed char类型的数组,sizeof(a) / sizeof(a[0])将等效于NUMBER OF ARRAY ELEMENTS / 1。除1是多余的。
在这种情况下,你可以简单地缩写为do:
sizeof(a)
例如:
char a[10];
size_t length = sizeof(a);
如果你想要证明,这里有一个GodBolt的链接。
尽管如此,如果类型发生重大变化(尽管这种情况很少见),该部门仍会保持安全。
最好的方法是保存这些信息,例如,在一个结构中:
typedef struct {
int *array;
int elements;
} list_s;
实现所有必要的功能,如创建、销毁、检查是否相等以及其他所有需要的功能。它更容易作为参数传递。