關於陣列名與指標的相互轉換

2022-03-19 12:31:35 字數 2157 閱讀 3103

本貼發於csdn中的c語言討論區,現**於此,希望更多的人可以看到,寫的不錯。

主要是依據以下關於陣列名和指標互相轉換的道理:

(1)當乙個陣列識別符號出現在表示式中,這個識別符號的型別就從「某種型別t的陣列」轉換成「指向型別t的指標」,而且它的值就等於陣列第乙個元素的位址。並且這個指標是個常量指標,不可改變其值的。

(2)但是當陣列識別符號被用作sizeof和取址(&)操作的運算元時,sizeof返回的是整個陣列的大小,而取址操作返回的是指向陣列的指標(而不是指向乙個值為陣列頭元素位址的指標的指標)。

(3)既然陣列標示符在表示式中被「轉換為」指標用,那對於二維陣列又是什麼情況呢?對於乙個二維陣列如:int a[3][3], a是指向一維陣列的指標;當進行一次a[i]這樣的運算後所得到的值是乙個指標,其所指物件是乙個int型別,運算子的作用除了變址,還將乙個行指標變為乙個列指標;同理當進行一次&a[i]這樣的運算後所得到的指標又是乙個指向一維陣列的指標,即行指標。

inta[3]

=;char

**s;

charp[3

][5] =

,,};s =(

char

**)p;

printf(

"a: %p/n

", a);

//0012ff74:a在表示式裡被轉為int *,指向a[0]

printf(

"*&a: %p/n",

*&a);

//printf(

"&a: %p/n",

&a);

//printf(

"&a[0]: %p/n",

&a[0]);

//printf(

"a[0]: %p/n

", a[

0]);   

//00000001:把a[0]的值以雙字的形式列印出來

printf(

"*a: %p/n",

*a);

////

所以*a其實就是a[0],所以結果同上一行。

printf(

"p: %p/n

", p);

//printf(

"&p: %p/n",

&p);

//printf(

"p[0]: %p/n

", p[

0]);

//0012ff60:p[0]是一維陣列的陣列名,出現在表示式中作為char *使用。

//printf(

"&p[0]: %p/n",

&p[0]);

//printf(

"p[1]: %p/n

", p[

1]);

//0012ff65:一維陣列名p[1]作為char *,指向p[1][0]。

//這個語句是要列印p[1][0]的位址,該位址等於p[0][0]的位址加5

printf(

"p[2]: %p/n

", p[

2]);   

//0012ff6a:一維陣列名p[2]作為char *,指向p[2][0]。

//這個語句是要列印p[2][0]的位址,該位址等於p[1][0]的位址加5

printf(

"&p[0][0]: %p/n",

&p[0][

0]);   

//printf(

"&p[1][0]: %p/n",

&p[1][

0]);   

//printf(

"&p[2][0]: %p/n",

&p[2][

0]);   

//printf(

"s的值: %p/n

", s);

//printf(

"s+1的值: %p/n

", s+1

); //

printf(

"*s: %p/n",

*s);

//63636261:s是char **,*s就是char*。

//因此這句意思是把s指向的記憶體取4個位元組(也就是p[0][0]到p[0]3)作為char*,列印其值。

printf(""

, s);

//printf(""

, s+

1);

//

陣列名與指標

引言 指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊...

陣列名與指標

include using namespace std int main int b 2 10 陣列名本身就是指標,再加上 就變成了雙指標,這裡的雙指標的就是指二維陣列 int p int a 1 p指向a陣列的第6個元素 雖然不存在 cout p 1 cout b 1 cout b 0 retur...

陣列名與指標

在本科畢業前,一直以為陣列名就是指標,但是最近看了一些技術文章和與一些技術大佬的討論,我開始迷茫了,在心裡一直有疑問,在本科寫程式的時候一直就拿陣列名當指標用啊,沒什麼問題啊,但是後來想了想,有了點靈感,就寫下來,不知道自己琢磨的是否通透,歡迎交流學習。首先說明陣列名為什麼不是指標 上例子 incl...