簡體   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