#include<stdio.h>
void func(int a[10]);
int main(void) {
int arr[10];
func(arr);
return 0;
}
void func(int a[10]) {
int b[10], x=5;
a =&x;
b =&x; //error: assignment to expression with array type
}
在此處提到的這個 C 代碼中,有一個錯誤 with b=&xsince 賦值給具有陣列型別的運算式,但為什么不 witha=&x畢竟a是一個陣列 to func?
uj5u.com熱心網友回復:
因為a它不是一個陣列(盡管表面上有類似的宣告),它是一個指標。您不能在 C 中將函式的引數宣告為陣列,如果這樣做,編譯器會默默地將它們更改為指標。
uj5u.com熱心網友回復:
在函式原型中
void func ( int a[10] )
陣列a 衰減為指標,因為在 C 中,您不能將陣列作為函式引數傳遞。因此,它等效于以下內容:
void func( int *a )
打電話時
func(arr);
在函式中main,陣列arr將衰減到指向陣列第一個元素的指標,即到&arr[0]。
因此,該行
a =&x;
是有效的,因為a它不是陣列,而只是一個指標,并且允許為指標分配新地址。
然而,該行
b =&x;
無效,因為它b是一個真正的陣列,您不能為整個陣列賦值(只能為其單個元素賦值)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361255.html
上一篇:從C中的陣列中洗掉元素
