作为更大任务的一部分,我试图在C中打印数组的长度,即数组中有多少个元素。数组是一个双精度数组,我想打印一个整数,即数组中有多少双精度数。 我有这段代码:
int array_length( double array[] ) {
double length = 0;
length = sizeof(array) / sizeof(double);
printf("%G", length);
return 0;
}
我在主要方面称它为:
int main( void ) {
double test[] = {1.1,2.2,3.3,4.4,5.5};
array_length(test);
return 0;
}
然而这会返回错误:
研究告诉我,错误:数组函数参数'array'上的'sizeof'将返回大小 'double *'[-Werror = sizeof-array-argument]
sizeof(array) / sizeof(double);
会给我一个数组的长度,我正在尝试使用"%G"允许我打印此代码返回的双精度。
我相信" double *"意味着长一倍,所以我尝试改变"%G"到"%LG"以及" double"的所有用途to" long double",但这并没有解决问题。这是怎么回事?
答案 0 :(得分:2)
sizeof
只能计算数组的大小,如果该范围的大小已知。 E.g:
double array[10];
printf("%d", sizeof(array) / sizeof(double)); // prints 10
然而:
void printSize(double array[]) {
printf("%d", sizeof(array) / sizeof(double)); // doesn't print 10
}
因为double array[]
只是double* array
的语法糖。
答案 1 :(得分:1)
数组被衰减为函数参数中的指针,因此无法从函数中找到数组的大小。
您必须将数组的大小作为参数传递。