繁体   English   中英

在 C 中传递指向 function 中的数组的指针

[英]Passing a pointer to an array in a function in C

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

2 个函数按预期工作,但我遇到了传递指针的 function 的问题。 我尝试用谷歌搜索它,并以其他方式进行测试,但我似乎不明白这些指针应该如何工作。 首先 function 应为 output 1、2、3。

第二 function 应 output 11、12、13

第三 function 应 output 101、102、103

第一个和第三个 function 工作,但问题在于第二个。 这是我写的:

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[]这样的所有 arguments ,编译器确实将其视为int *ia 任何潜在的“数组”大小都无关紧要,所有函数都采用精确的int *类型参数。

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

事实上,function 调用

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

实际上等于

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

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

*pi = 11, 12, 13

这相当于:

pi[0] = 11, 12, 13;

它使用逗号运算符,使其等效于:

pi[0] = 13;

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

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

当然,您也需要使用循环以相同的方式打印值。

引用指针的语法与数组相同:

   pi[0] = 1;
   pi[1] = 2;
   pi[2] = 3;

您还需要相应地更改printf循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM