作为更大任务的一部分,我试图在 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”,但这并没有解决问题。这里发生了什么?
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.