计算C中数组中的元素

pr1*_*m3x -1 c

我无法弄清楚如何找到数组的大小就是我所做的

#include "stdio.h"

#define DEBUG 1



static void print_array(int arr[]);

int main (int argc, const char * argv[])
{
    int str_numbers[5] = {1,4,8,2,9};

    print_array(str_numbers);
}


static void print_array(int arr[])
{
    int total = sizeof(arr)/sizeof(arr[0]);

#ifdef DEBUG
    printf("Total %d", total);
#endif
}
Run Code Online (Sandbox Code Playgroud)

结果总共是2而不是5.我想念的是什么?

APr*_*mer 17

猜测:您没有显示您的代码,但实际上您正在为32位int的64位实现中的函数参数执行此操作.sizeof(array)是数组的大小,sizeof(指针)是指针的大小,而不是指针可指向的数组的大小.

#include <stdio.h>

void f(int* str_numbers)
{
    int total = sizeof(str_numbers)/sizeof(str_numbers[0]);
    printf("In f: %d\n", total);
}

int main ()
{
    int str_numbers[5] = {1,4,8,2,9};
    int total = sizeof(str_numbers)/sizeof(str_numbers[0]);
    printf ("In main: %d\n", total);
    f(str_numbers);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

In main: 5
In f: 2
Run Code Online (Sandbox Code Playgroud)

这是我对这种实施的期望.

编辑:使用类似的语法print_array(int arr[])不会改变arr是指针的事实.可能有一种方法在C99中说它是一个数组,但我不记得它和VLA已经在C11中被选中,以使标准与实践一致.

  • 心灵调试!令人印象深刻的推理,@ AProgrammer. (2认同)