c語言中陣列名和陣列名取位址理解

2021-10-04 18:31:56 字數 803 閱讀 3029

1、陣列名是個指標型常量,也就是值不能被改變。(指標常量和常量指標區別見本文)

char *str = "hello";

char  ch[6] = "hello";

ch = str;//錯誤,常量不能被賦值,正如 1=2,字面值常量1被賦值為2一樣錯誤。

char  ch[2]; 定義後,陣列名相當於char * const ch = 0x...; ch就是某個常量的替代符了。

陣列名指向的是陣列第乙個元素的首位址。

2、陣列名在以下兩種/三種情況下不會被當做指標常量

1)陣列名作為sizeof操作符的運算元

char  ch[6] = "hello";

sizeof(ch);//值為6,是陣列的佔的位元組數。

2)陣列名作為單目操作符&的運算元

char  ch[6] = "hello";

&ch;//取陣列名的位址,不是指標常量的位址,而是指向整個陣列的指標。

*3)當為字元陣列的時候,使用陣列名列印輸出的時候,如下所示

printf("%s",ch);//列印輸出的是 hello

std::cout <注意:sizeof(陣列名)和sizeof(常量指標)結果是不一樣的

sizeof(指標)無論是int* 或者是 char* 都是4個位元組。

int main()

陣列名和陣列名取位址

在c中,在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量 也就是陣列第乙個元素的位址。它的型別取決於陣列元素的型別 如果它們是int型別,那麼陣列名的型別就是 指向int的常量指標 在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符 的運算元時。siz...

陣列名和陣列名取位址

1 int a 10 2 int p a 3 int q 10 a 第二個為指向陣列的指標.a只是a 0 的位址,a 1就是a 1 的位址了,a是整個a 10 的首位址,是以整個陣列為角度來看,雖然它與a 0 的值相同,但是 a 1就已經增加了10個int型別的位元組的長度了.1 include 2...

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

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