gpt4 book ai didi

c - 为什么 int (*p)[] 不能用作 C 函数的参数?

转载 作者:行者123 更新时间:2023-11-30 19:57:09 25 4
gpt4 key购买 nike

#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 函数的参数?

最佳答案

int (*p)[] 可以用作函数的参数。给出错误的代码部分是 sizeof *p ,这显然是不可能的,因为 *p 的类型是 int[]这是一个不完整的类型,因此没有已知的大小。

为了让函数知道数组的长度,必须设计一种方法让函数接收此信息。选项包括:

  • 您在原始代码中做了什么。
  • 将长度作为另一个参数传递。
  • 包括数组元素的长度。
  • 在数组末尾有一个标记值。

最常见的习惯用法是传递int *p, size_t n,在没有给出维度的情况下使用指向数组的指针实际上不会获得任何东西。

关于c - 为什么 int (*p)[] 不能用作 C 函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52465294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com