将整数传递给只接受数组的函数

7

关于函数和数组有一个问题。假设我有以下代码:

int example1(unsigned int hold[], size)
 {
   ....
 }

在另一个函数中,我想调用我的示例1函数,但不是传递一个数组,而是传递一个整数,如下所示:
int example2(unsigned int hold)
{
  int i;

 for(i = 0; i < 10; i++)
    example1(hold,i);
}

如何使其工作?

4
请问您需要的是另一个只接受一个整数的函数吗?您的问题和意图不够清晰。 - Pablo
那么在第二个代码块中,您的意图是将hold作为一个元素数组传递吗?如果是这样,那么您的调用应该是example1(&hold, 1);。或者您是想创建一个包含来自hold值的一个元素的i元素数组吗?还是您正在尝试创建一个所有元素都设置为holdi元素数组?请使用标签下方的“编辑”按钮编辑问题 - 不要将其他信息放入评论中,因为它可能会被忽略 - 并澄清您要尝试做什么。谢谢。 - Bob Jarvis - Слава Україні
3个回答

11

你的 example1 函数接受一个指向 int 数组第一个元素的指针。由于单个变量的指针与数组第一个元素的指针本质上是等价的,因此您可以只传递该单个 int 的地址,并将其大小设置为 1:

example(&hold, 1);

1
是的,但我会换个方式来表达。OP的函数根本没有在第一次接收数组参数。这是OP的一个误解,尽管这是一个常见的误解。该函数接收一个指针。指向标量int变量的指针和指向int数组元素的指针之间没有固有的区别。 - John Bollinger

5

可以将指向值的指针传递到只有1个元素的数组中; 您的循环使 example1 假定数组大小大于1。

由于您将 i 作为大小传递,因此创建一个具有 i 个元素的数组,设置一些值,并像这样将其传递给 example1

for(size_t i = 0 ; i < 10 ; i++) {
    unsigned int arg[i+1];
    for (size_t j = 0 ; j != i ; j++) {
        arg[j] = value;
    }
    example1(arg, i);
}

这是唯一可行的解决方案,给出example1函数定义。传递&i, 1不会传递一个数组(当作参数传递时,数组被转换为指针的事实在这里是一个误导)。 - David C. Rankin
@chux 对的...谢谢! - Sergey Kalinichenko

0
在C99中,您还可以使用复合字面量
example1((unsigned int[]){hold}, 1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接