计数C中的数组元素的数目[复制](Count the number of elements in a

2019-08-21 09:21发布

这个问题已经在这里有一个答案:

  • 在C数组的大小 6个答案

如何获得存在于C中的整数的数组元素的数目的阵列被传递到功能后? 下面的代码无法正常工作。

size=sizeof(array)/sizeof(array[0]);

Answer 1:

在C语言中,你只能得到静态分配的阵列,即大小

int array[10];
size = sizeof(array) / sizeof(int);

将给予10。

如果你的数组声明或通过int* array ,有没有办法来确定其大小,只给这个指针。



Answer 2:

你最有可能做这里面的功能,以您传递数组。
该阵列衰变指向第一个元素,所以你不能被调用的函数内这样做。

调用函数之前执行此计算,并通过大小作为函数的参数。



Answer 3:

你是在错误的方式去了解它。 我会尝试用一个小的代码示例来解释。 【解说】代码中的注释:

int array[100];
int size = sizeof(array) / sizeof(array[0]);  // size = 100, but we don't know how many has been assigned a value

// When an array is passed as a parameter it is always passed as a pointer.
// it doesn't matter if the parameter is declared as an array or as a pointer.
int getArraySize(int arr[100]) {  // This is the same as int getArraySize(int *arr) { 
  return sizeof(arr) / sizeof(arr[0]);  // This will always return 1
}

正如你可以从代码中看到上面你不应该使用sizeof找到多少元素有一个数组。 做正确的做法是有一个(或两个)变量来跟踪的大小。

const int MAXSIZE 100;
int array[MAXSIZE];
int size = 0; // In the beginning the array is empty.

addValue(array, &size, 32);   // Add the value 32 to the array

// size is now 1.

void addValue(int *arr, int *size, int value) {
    if (size < MAXSIZE) {
        arr[*size] = value;
        ++*size;
    } else {
        // Error! arr is already full!
    }
}


文章来源: Count the number of elements in an array in C [duplicate]