1 陣列名的表示的實際物

2021-05-25 21:07:59 字數 797 閱讀 6056

**「清水河畔」論壇

陣列名和指標有著很大的區別,在使用時要進行正確的區分,其區分規則如下:

規則1 陣列名指代一種資料結構,這種資料結構就是陣列

char   str[10];    

char   *pstr   =   str;    

cout   <<   sizeof(str)   <<   endl;    

cout   <<   sizeof(pstr)   <<   endl;    

輸出結果為:    

10    

4    

這說明陣列名str指代資料結構char[10]。    

規則2 陣列名可以轉換為指向其指代實體的指標,而且是乙個指標常量,不能作自增、自減等操作,不能被修改

char   str[10];      

char   *pstr   =   str;    

str++;   //編譯出錯,提示str不是左值     

pstr++;   //編譯正確      

規則3 指向陣列的指標則是另外一種變數型別(在win32平台下,長度為4),僅僅意味著陣列的存放位址

規則4 陣列名作為函式形參時,在函式體內,其失去了本身的內涵,僅僅只是乙個指標;很遺憾,在失去其內涵的同時,它還失去了其常量特性,可以作自增、自減等操作,可以被修改    

例如:    

void   arraytest(char   str)    

int   main(int   argc,   char*   argv)    

陣列名和陣列名的取址

關於陣列名和指標的區別 推薦看這兩篇文章 示例 char a 3 輸出10進製位址 輸出 a 為 2686777 a 為 2686777 a是陣列名,編譯器處理時相當於陣列首元素的位址 a是乙個指向陣列的指標,值為陣列的位址,等於陣列首元素的位址 輸出 a 為 1 a 為 1 a 為 2686777...

陣列名和陣列名取位址的區別

以下 會列印出什麼樣的日誌呢?cpp view plain copy include int a 2 int main 本機 linux 結果輸出 a 0x804a014 a 0x804a014 a 1 0x804a018 a 1 0x804a01c 沒錯,上面i 和 ii列印出來的位址是一樣的,i...

陣列名和陣列名取位址的區別

include int main 執行效果 printf d n sizeof a 結果20,有點陶醉.a,既然是指向陣列結構的指標,不應該大小為20.其實,ps 如果是 int a 1,則結果是1245037 即1245036 1 揭密陣列名 陣列名的內涵在於其指代實體是一種資料結構,這種資料結構...