c打印数组长度

时间:2016-03-30 09:59:50

标签: c arrays

作为更大任务的一部分,我试图在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",但这并没有解决问题。这是怎么回事?

2 个答案:

答案 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)

数组被衰减为函数参数中的指针,因此无法从函数中找到数组的大小。

您必须将数组的大小作为参数传递。

相关问题