C語言 充當右值時,陣列名前加不加 的區別

2021-10-07 18:25:25 字數 821 閱讀 6216

假設陣列名是buf。

buf&buf充當右值時的區別是:

buf是陣列首元素的首位元組位址;

&buf是整個陣列的首位址。

解釋:這兩個在值上是相等的,但是意義資料型別不相同。

&buf作右值時,只能賦值給「陣列指標型別」的指標變數,即&buf得到的是乙個陣列指標。

buf作右值時,只能賦給普通的指標變數,該指標變數的型別要和陣列的資料型別一致。

意義不相同會導致他們在參與運算的時候有不同的表現(有什麼不同?見下例)。

【例】

#include

intmain

(void);

//定義乙個陣列指標,p1

int(

*p1)[5

]=null

;//定義乙個普通int型指標,p2

int*p2=

null;

p1=&buf;

//正確給陣列指標賦值的寫法

//p1=buf; //這種寫法,編譯器雖然不會報錯,但是會警告,提示指標型別不匹配。

//通過陣列指標來遍歷輸出一維陣列a的元素

for(i=

0;i<

5;i++

)printf

("\n");

//通過普通指標來遍歷輸出一維陣列a的元素

p2=buf;

for(i=

0;i<

5;i++

)return0;

}

c語言 陣列名和 陣列名的區別

在學習c語言的過程中我們可以發現乙個一維陣列的的陣列名往往具有兩層含義 一.作為陣列名代表整個陣列 二.作為指標代表陣列的首元素位址 因此很容易把陣列和指標混為一談 我們可以發現陣列名等價於乙個指向陣列首位址的指標。當陣列名代表整個陣列的時候是在以下兩種情況 1.在用sizeof關鍵字求陣列所佔的記...

C語言 陣列名與 陣列名的區別

char str 10 str 的值為str 0 的位址值,型別為char 型 str的值為陣列的首位址,型別為char 此處,兩者的值是相同的。所以在使用的時候要注意指標的型別,值相同,型別不同也是不對的 include include include include contact.h int ...

陣列名a作為左值和右值的區別

簡單而言,出現在賦值符 右邊的就是右值,出現在賦值符 左邊的就是左值。比如,x y。左值 在這個上下文環境中,編譯器認為x的含義是x所代表的位址。這個位址只有編譯器知道,在編譯的時候確定,編譯器在乙個特定的區域儲存這個位址,我們完全不必考慮這個位址儲存在 c語言引入乙個術語 可修改的左值 意思就是,...