gpt4 book ai didi

c - 在C中的函数中传递指向数组的指针

转载 作者:行者123 更新时间:2023-12-02 07:57:32 26 4
gpt4 key购买 nike

我需要编写一个程序来实现将数组传递给函数的 3 种方法。

2 函数按预期工作,但我对传递指针的函数有疑问。我尝试用谷歌搜索它,并以其他方式进行测试,但我似乎不明白这些指针应该如何计算。第一个函数应该输出 1、2、3。

第二个函数应该输出 11, 12, 13

第三个函数应该输出101、102、103

第一个和第三个函数有效,但问题出在第二个函数上。这是我写的:

int main(void)
{
int iArray[3] = {100,234,567};

f1(iArray);
f2(iArray);
f3(iArray);

return EXIT_SUCCESS;
}

void f1(int ia[3]) // sized array
{
ia[0] = 1;
ia[1] = 2;
ia[2] = 3;

for (int i = 0; i < 3; i++)
{
printf("%d\n", ia[i]);
}
printf("\n");
}

void f2(int* pi) // pointer
{
*pi = 11, 12, 13;

printf("%d", *pi);
printf("\n\n");

}

void f3(int ia[]) // unsized array
{
ia[0] = 101;
ia[1] = 102;
ia[2] = 103;

for (int i = 0; i < 3; i++)
{
printf("%d\n", ia[i]);
}
}

最佳答案

在 C 中,您不能传递数组,只能传递指向其元素的指针。这意味着对于像 int ia[] 这样的所有参数,编译器实际上将其视为 int *ia。任何潜在的“数组”大小都无关紧要,您的所有函数都采用确切的 int * 类型参数。

这是因为数组自然地衰减为指向其第一个元素的指针。

其实是函数调用

f1(iArray);
f2(iArray);
f3(iArray);

实际上等于

f1(&iArray[0]);
f2(&iArray[0]);
f3(&iArray[0]);

现在对于第二个函数的问题,就是这一行:

*pi = 11, 12, 13

相当于:

pi[0] = 11, 12, 13;

正在使用 comma operator这使得它等同于:

pi[0] = 13;

要分配数组的每个元素,您需要像使用“数组”函数一样对每个元素进行索引:

pi[0] = 11;
pi[1] = 12;
pi[2] = 13;

当然你也需要用同样的方式打印值,带一个循环。

关于c - 在C中的函数中传递指向数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61757104/

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