【发布时间】:2019-02-27 03:16:47
【问题描述】:
#include <stdio.h>
void print(int (*p)[3]);
int main(void)
{
int a[3] = {1, 2, 3};
print(&a);
return 0;
}
void print(int (*p)[3])
{
for (int i = 0; i < sizeof(*p) / sizeof(**p); i++)
printf("%d\n", (*p)[i]);
}
我写了一个 C 函数。见上文。
它可以打印数组中的所有元素。
有一件事不是那么完美:数组元素的数量似乎是预先知道的。
所以我做了一些修改,希望使功能通用:
#include <stdio.h>
void print(int (*p)[]);
int main(void)
{
int a[3] = {1, 2, 3};
print(&a);
return 0;
}
void print(int (*p)[])
{
for (int i = 0; i < sizeof(*p) / sizeof(**p); i++)
printf("%d\n", (*p)[i]);
}
在函数中,p是指向整个数组的指针。
但是编译失败。
为什么不能将 int (*p)[] 用作 C 函数的参数?
【问题讨论】:
-
只使用指针。但是你需要知道元素的数量或者有某种终结符。
-
因为
&a的类型是int (*)[3],所以类型本身包含了数组的大小,没有大小就不能有数组。 -
“问题”的“正常”解决方案是将指针传递给第一个元素和元素的数量作为参数。
-
@Someprogrammerdude 但是你可以拥有指向未知大小的数组的指针
-
来自编译器的诊断信息必须逐字复制到问题中,否则这对未来的读者没有用处。
标签: c arrays function arguments sizeof