如何找到数组中的元素数量?

And*_*ewP 45 c arrays sizeof

我有一个int数组,我需要找到其中的元素数量.我知道这与它有关,sizeof但我不确定如何使用它.

Pav*_*lev 39

如果您的数组在范围内,则可以使用它sizeof来确定其大小(以字节为单位)并使用除法来计算元素数:

#define NUM_OF_ELEMS 10
int arr[NUM_OF_ELEMS];
size_t NumberOfElements = sizeof(arr)/sizeof(arr[0]);
Run Code Online (Sandbox Code Playgroud)

如果您将数组作为函数参数接收或在堆中分配数组,则无法使用该数据确定其大小sizeof.你必须以某种方式存储/传递大小信息才能使用它:

void DoSomethingWithArray(int* arr, int NumOfElems)
{
    for(int i = 0; i < NumOfElems; ++i) {
        arr[i] = /*...*/
    }
}
Run Code Online (Sandbox Code Playgroud)


she*_*ngy 17

int a[20];
int length;
length = sizeof(a) / sizeof(int);
Run Code Online (Sandbox Code Playgroud)

并且您可以使用其他方法使您的代码不被硬编码 int

假如你有一个数组 array

你只需要:

int len = sizeof(array) / sizeof(array[0]);
Run Code Online (Sandbox Code Playgroud)


Der*_*rek 10

我个人认为sizeof(a)/ sizeof(*a)看起来更干净.

我也更喜欢将它定义为宏:

#define NUM(a) (sizeof(a) / sizeof(*a))
Run Code Online (Sandbox Code Playgroud)

然后你可以在for循环中使用它,因此:

for (i = 0; i < NUM(a); i++)
Run Code Online (Sandbox Code Playgroud)

  • @Gavin不,它不会计算每次迭代的大小.编译器足够聪明,可以看到每个sizeof和division的结果都是常量,并在编译时确定结果,然后将其作为常数编译成代码.您可能会被`sizeof`应用程序的外观误导,该应用程序由于括号而看起来像一个函数,但它不是函数.`sizeof`是一个运算符,括号只是一个约定. (9认同)
  • 你可以这样做,但每次在for循环中进行测试时都会计算出大小,所以每次迭代都会这样.因此,每次通过循环都会进行划分.将'NUM(a)`的结果分配给循环正上方的实例变量会更有效,并在循环中使用该值. (5认同)

Pri*_*lly 7

超级容易。

只需使用 将分配的字节数除以数组数据类型的字节数即可sizeof()

例如,给定一个名为的整数数组 myArray

int numArrElements = sizeof(myArray) / sizeof(int);
Run Code Online (Sandbox Code Playgroud)

现在,如果你的阵列的数据类型是不恒定的,并可能发生变化,则使方程使用除数的第一个值的大小作为数据类型的大小。

例如:

int numArrElements = sizeof(myArray) / sizeof(myArray[0]);
Run Code Online (Sandbox Code Playgroud)

这样,代码是类型不可知的,无论数组的数据类型如何,都可以正常运行。


小智 6

除非是字符数组,否则无法找到数组中的元素数.考虑以下示例:

int main()
{
    int arr[100]={1,2,3,4,5};
    int size = sizeof(arr)/sizeof(arr[0]);
    printf("%d", &size);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

即使元素数为5,上面的值也给出了值100.如果它是一个字符数组,您可以线性搜索数组末尾的空字符串,并在您通过时增加计数器.

  • 我想你想写:`printf("%d", size);`。但你是对的,你只能找到数组的定义大小,而不是实际大小! (2认同)
  • “除非是字符数组,否则无法找到数组中元素的数量。” 其他2个答案虽然做到了 (2认同)

小智 5

实际上我们无法计算数组中存储了多少元素

但是您可以使用 sizeof 运算符找到数组长度或大小。

但是为什么我们找不到我的数组中存在多少个元素。

因为当我们初始化一个数组编译器时,会像 a[10](10 个大小为 4 的块)一样在我们的程序上分配内存,如果我们将某个值放入某个索引中,例如 a[0]=1,a[1],则每个块都有垃圾值=2,a[3]=8; 和其他块有垃圾值,没有人可以分辨哪个值是垃圾,哪个值不是垃圾 ,这就是我们无法计算数组中有多少元素的原因。我希望这会帮助你理解。小概念