將陣列傳遞給函式時,以下代碼有什么區別?撰寫代碼時應該使用哪個?
PS:我想知道在函式引數中使用 int *ptr 與 int ptr[] 的區別。
void foo(int *ptr)
{
...
...
}
void main()
{
int a[]={10,20,30};
foo(a);
}
對比
void foo(int ptr[])
{
...
...
}
void main()
{
int a[]={10,20,30};
foo(a);
}
uj5u.com熱心網友回復:
它們完全一樣。
如果函式的引數宣告為陣列型別,則該引數將調整為指標型別。
這在C 標準關于函式宣告符的第 6.7.6.3p7 節中有詳細說明:
將引數宣告為“型別陣列”應調整為“型別限定指標”,其中型別限定符(如果有)是陣列型別派生的
[和中指定的那些。]如果關鍵字 static 也出現在陣列型別派生的[and]中,那么對于函式的每次呼叫,對應的實際引數的值應提供對陣列的第一個元素的訪問,該陣列的元素至少與尺寸表達。
這部分是因為在大多數情況下,陣列衰減為指向其第一個元素的指標,因此甚至不可能將陣列傳遞給函式(盡管您可以將指標傳遞給陣列)。
從可讀性的角度來看,當您希望接收指向陣列第一個元素的指標時,您可能希望使用陣列語法,而當您希望接收指向單個物件的指標時,您可能希望使用指標語法。
例如:
void foo1(int *p)
{
*p = 2;
}
void foo2(int p[], int len)
{
int i;
for (i=0; i<len; i ) {
printf("%d\n", p[i]);
}
}
您可以在這兩種情況下使用任何一種語法,但特定的語法使函式的操作更加明顯。
uj5u.com熱心網友回復:
陣列到指標的轉換
在函式引數串列中使用陣列型別時,將其轉換為相應的指標型別:
int f(int a[2])并int f(int* a)宣告相同的功能。由于函式的實際引數型別是指標型別,因此帶有陣列引數的函式呼叫會執行陣列到指標的轉換;...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/505916.html
上一篇:轉換為正方形后對陣列進行排序
