陣列傳參,指標作為引數
目錄
一、陣列傳參
1.一維陣列作為引數(形參)
一維陣列作為引數(形參)傳參時——>可用一維陣列來接收(實參)
void test(int[10])
{
;
}
int main()
{
int arr [10]= {0};
test(arr);
return 0;
}
int[10])
{
;
}
int main()
{
int arr [10]= {0};
test(arr);
return 0;
}
一維陣列作為引數(形參)傳參時——>可用一級指標來接收(實參)
void test(int*p)
{
;
}
int main()
{
int arr [10]= {0};
test(arr );
return 0;
}
int*p)
{
;
}
int main()
{
int arr [10]= {0};
test(arr);
return 0;
}
C 語言中,當一維陣列作為函式引數(形參,實參)的時候,編譯器總是把它解析成一個指向其首元 素首地址的指標。
2.二維陣列
二維陣列作為引數(形參)傳參時——>可用二維陣列接收(實參)
void test(int arr[][10]) { ; } int main() { int arr [10][10]= {0}; test(arr); return 0; }
arr[][10]) { ; } int main() { int arr [10][10]= {0}; test(arr); return 0; }
接受時arr[][]第一個[]中可以忽略,但是第二個[]不能省略,因為二維陣列可以不知道有多少行,但是一定得知道一行有多少個元素。
二維陣列作為引數(形參)傳參時——>可用陣列指標接收(實參)
void test(int (*p)[10])
{
;
}
int main()
{
int arr [10][10]= {0};
test(arr);
return 0;
}
int (*p)[10])
{
;
}
int main()
{
int arr [10][10]= {0};
test(arr);
return 0;
}
因為C 語言中,當一維陣列作為函式引數的時候,編譯器總是把它解析成一個指向其首元 素首地址的指標,
但這裡需要注意的是:C 語言中,當一維陣列作為函式引數(形參,實參)的時候,編譯器總是把它解析 成一個指向其首元素首地址的指標。這條規則並不是遞迴的,也就是說只有一維陣列才是 如此,當陣列超過一維時,將第一維改寫為指向陣列首元素首地址的指標之後,後面的維 再也不可改寫。比如:a[3][4][5]作為引數時可以被改寫為(*p)[4][5]。
二、指標傳參
1.一級指標傳參(形參)
一級指標傳參(形參)——>可以用一級指標接收(實參)
void test(int *p)
{
;
}
int main()
{
int *arr;
test(arr);
return 0;
}
指標p只是arr指標的臨時拷貝(在棧上建立),所以test函式結束後就銷燬了,如果要利用指標p則test函式必須要由返回值且型別為指標p的型別。然後在test函式最後加上return p;即可在利用函式返回值返回p的地址。
一級指標傳參(形參)——>可以用二陣列接收(實參)
void test(int arr[])
{
;
}
int main()
{
int *arr;
test(arr);
return 0;
}
同上C 語言中,當一維陣列作為函式引數(形參,實參)的時候,編譯器總是把它解析成一個指向其首元 素首地址的指標。
一級指標傳參(形參)——>可以用二維指標接收(實參)傳的時一級指標的地址
void test(int**p)
{
*p= 2;
return p;
}
int main()
{
int *arr;
test(&arr);
return 0;
}
2.二級指標可以傳參,用三級指標接收。(以此類推)但大部分情況下用來做實參接收一維陣列,指標陣列。
三、指標陣列,陣列指標傳參
1.指標陣列傳參
指標陣列傳參(形參)——>可以用指標陣列接收(實參),也可以用二級指標接收
void test(int *arr[])
{
;
}
int main()
{
int *arr[] = { 0 };
test(arr);
return 0;
}
指標陣列傳參(形參)——>可以用二級指標接收(實參)
void test(int **p)
{
;
}
int main()
{
int *arr[] = { 0 };
test(arr);
return 0;
}
同樣C 語言中,當一維陣列作為函式引數(形參,實參)的時候,編譯器總是把它解析成一個指向其首元 素首地址的指標。
int*arr[]是指標陣列做引數時編譯器就解析為int*(*)arr。
2.陣列指標傳參
陣列指標可做維二維陣列傳參時的實參。
總結:
C 語言中,當一維陣列作為函式引數(形參,實參)的時候,編譯器總是把它解析 成一個指向其首元素首地址的指標。這條規則並不是遞迴的,也就是說只有一維陣列才是 如此,當陣列超過一維時,將第一維改寫為指向陣列首元素首地址的指標之後,後面的維 再也不可改寫。比如:a[3][4][5]作為引數時可以被改寫為(*p)[4][5]。