c 打印数组长度

标签 c arrays

<分区>

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

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

我在 main 中这样调用它:

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

但是这会返回错误:

error: ‘sizeof’ on array function parameter ‘array’ will return size of ‘double *’ [-Werror=sizeof-array-argument]

研究告诉我

sizeof(array) / sizeof(double);

会给我一个数组的长度,我正在尝试使用“%G”来打印这段代码返回的 double 值。

我认为“double*”表示 long double,所以我尝试将“%G”更改为“%LG”并将所有使用的“double”更改为“long double”,但这并没有解决问题。这是怎么回事?

最佳答案

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

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 的语法糖。

关于c 打印数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36305453/

相关文章:

javascript - 将一个对象数组与另一个对象数组进行比较

char *str[ ] 通过引用传递不起作用

c - 如何在结构字符串数组中向下移动元素?

c - 任何允许与服务器直接通信的 C 中的 HTTP 库?

c - 每当我执行代码时都会得到 "-317629566"

javascript - 按两个属性排序,其中一个属性优先但具有共同值?

c - 三维数组函数参数 c

c - 函数调用麻烦

c - 我如何告诉 C 程序创建 n 个数组,通过 scanf 读取 n?

java - 将以字母开头的数组列表中的单词索引存储到一个数组中,该数组可以存储每个字母的索引