下面的 C 程式給了我輸出,b但是由于 Array name 默默地“衰減”成一個常量指標,所以為什么下面的程式可以作業,它應該給出一個錯誤,說明需要 l 值,即。在 LHS 上賦值所需的變數指標?
void check(){
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
f(a);
}
void f(char a[]){
a ;
printf("%c",*a);
}
編輯 :
現在我做同樣的事情但不是在不同的函式中,并且在更新的代碼之后出現錯誤。
void check(){
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
// f(a);
a ;
printf("%c",*a);
}
source_file.c: In function ‘check’:
source_file.c:73:4: error: lvalue required as increment operand
a ;
^~
uj5u.com熱心網友回復:
在代碼中
void f(char a[]){
a ;
printf("%c",*a);
}
a不是陣列 - 它是一個指標。在函式引數宣告的背景關系中,T a[N]并T a[]“調整”為T *a- 所有三個宣告a為指向 的指標T,而不是T.
當您f使用陣列引數呼叫時:
f(a);
所述表達 a“衰減”從型別“的10個元素的陣列int”到“指標int”,所以什么f實際接收是一個指標,而不是一個陣列物件。這完全等同于寫作
f( &a[0] );
在代碼中
void check(){
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
// f(a);
a ;
printf("%c",*a);
}
a是陣列運算式,不是指標,陣列型別的運算式不能是 的運算元 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/340802.html
