c 打印数组长度

Isa*_*aac 1 c arrays

作为更大任务的一部分,我试图在 C 中打印数组的长度,即数组中有多少个元素。该数组是一个双精度数组,我想打印一个整数,它是数组中有多少双精度。我有这个代码:

int array_length( double array[] ) {
    double length = 0;
    length = sizeof(array) / sizeof(double);
    printf("%G", length);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我像这样在 main 中调用它:

int main( void ) {
    double test[] = {1.1,2.2,3.3,4.4,5.5};
    array_length(test);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是这会返回错误:

错误:数组函数参数“array”上的“sizeof”将返回“double *”的大小[-Werror=sizeof-array-argument]

研究告诉我

sizeof(array) / sizeof(double);
Run Code Online (Sandbox Code Playgroud)

会给我一个数组的长度,我正在尝试使用“%G”来允许我打印此代码返回的双精度值。

我相信“double*”意味着long double,所以我尝试将“%G”更改为“%LG”并将“double”的所有用法更改为“long double”,但这并没有解决问题。这里发生了什么?

Tam*_*ola 5

sizeof如果数组的大小在该范围内已知,则只能计算数组的大小。例如:

double array[10];
printf("%d", sizeof(array) / sizeof(double)); // prints 10
Run Code Online (Sandbox Code Playgroud)

然而:

void printSize(double array[]) {
    printf("%d", sizeof(array) / sizeof(double)); // doesn't print 10
}
Run Code Online (Sandbox Code Playgroud)

因为这里double array[]只是double* array.