[英]How to pass the reference of a random element of a 2d array to a function in c?
假設我有一個數組arr[6][6]
。 我有一個 function 假設int CalculateSum()
。 作為 function 的參數,我不想傳遞整個數組,但我想將arr[2][3]
傳遞給CalculateSum
。 我怎樣才能做到這一點?
在 C 中,您不會只傳遞整個數組的引用。
如果要將引用傳遞給數組的特定元素,請使用&array[col][row]
。
例子:
int foo(int *val)
{
return *val * *val;
}
int main(void)
{
int a[5][5] = {{1,2,3,4,5},{12,22,32,42,52},{13,23,33,43,53},{14,24,34,44,54},{15,25,35,45,55}};
printf("%d\n", foo(&a[3][2]));
}
arr[2][3]
的地址就是&arr[2][3]
。 您可以將此地址傳遞給CalculateSum
。
例如,如果arr
定義為float arr[6][6]
,則可以使用 int CalculateSum
int CalculateSum(float *p)
聲明 CalculateSum。 然后,當使用CalculateSum(&arr[2][3])
調用時,例程可以使用*p
或p[0]
訪問arr[2][3]
。 它還可以使用p[1]
和p[2]
訪問arr[2][4]
和arr[2][5]
。
C 標准沒有正式定義超出當前行。 如果CalculateSum
想要訪問arr[3][3]
,則 memory 地址名義上是p+6
,因為arr
的行有六個元素長。 C 標准沒有定義使用它來訪問arr[3][3]
,但編譯器支持它。 (Apple Clang 確實支持這種方式訪問多維 arrays。)
根據具體情況,您可能需要通過CalculateSum
arguments 告訴它arr
在 memory 中的布局方式(特別是它的行是六個元素長還是其他長度)以及它應該在每個維度上操作多少個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.