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

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


当前回答

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

其他回答

int size = (&arr)[1] - arr;

点击这个链接了解解释

你可以使用&操作符。以下是源代码:

#include<stdio.h>
#include<stdlib.h>
int main(){

    int a[10];

    int *p; 

    printf("%p\n", (void *)a); 
    printf("%p\n", (void *)(&a+1));
    printf("---- diff----\n");
    printf("%zu\n", sizeof(a[0]));
    printf("The size of array a is %zu\n", ((char *)(&a+1)-(char *)a)/(sizeof(a[0])));


    return 0;
};

下面是示例输出

1549216672
1549216712
---- diff----
4
The size of array a is 10

最简单的答案:

#include <stdio.h>

int main(void) {

    int a[] = {2,3,4,5,4,5,6,78,9,91,435,4,5,76,7,34}; // For example only
    int size;

    size = sizeof(a)/sizeof(a[0]); // Method

    printf("size = %d", size);
    return 0;
}

最好的方法是保存这些信息,例如,在一个结构中:

typedef struct {
     int *array;
     int elements;
} list_s;

实现所有必要的功能,如创建、销毁、检查是否相等以及其他所有需要的功能。它更容易作为参数传递。

注意:正如M.M在评论中指出的那样,这可能会给你未定义的行为。

int a[10];
int size = (*(&a+1)-a);

要了解更多细节,请参见这里和这里。