C 中陣列名和指標的區別聯絡

2022-01-15 04:04:52 字數 968 閱讀 8624

第乙個結論:

#include "iostream.h"

void main()

;3、char *p=str;//

4、 cout<7、p++;

8、str++;

}看似指標和陣列名是相同的,其實不然;第4行和第6行輸出結果不同就是證明,前者是字元陣列長度7,而指標在32位機中是乙個dword,4個位元組,在64位中就是8了。

第二個結論:

第8句存在的話會編譯報錯,也就是陣列名不能自加和自減,而指標可以。

(1)陣列名的內涵在於其指代實體是一種資料結構,這種資料結構就是陣列;//************這才是實質

(2)陣列名的外延在於其可以轉換為指向其指代實體的指標,而且是乙個指標常量;//********code

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

第三個結論:

陣列名失去原本內含,淪為指標。可以做自增自減操作。

#include "iostream.h"

void fun(char str);

void main()

void fun(char str)

;int *ptr=(int *)(&a+1);//&a是不是取位址,還是引用?

cout<<*(ptr-1)《最終輸出結果:5.

解釋1:a是乙個陣列名,上面說的,陣列是乙個資料結構;並且a已經能代表資料結構(本陣列)的位址了,於是&a是對資料結構取位址,取得的位址+1會怎麼樣?會指向下乙個資料結構,但是這裡只有乙個資料結構。。。那麼int *ptr=(int *)(&a+1);執行後ptr指向資料結構(int[5]的陣列)的結束,a是陣列,&a 就是指向陣列的指標,&a+1所以位移5個int,*(ptr-1)又是int* 反位移1個,5-1=4,位移4位就是第五個數

解釋2:a是乙個int[5]型別,所以&a+1就會到陣列末尾,再減1就是5的位置

C 中陣列名和指標的區別

記得在學習c 陣列的時候,老師對我們說 陣列名就是指標。這句話一直根深蒂固於我的腦袋裡,直到我無意中編寫一段程式時,發現兩者並不完全等同,請看下面一段 這段 完全說明了陣列名不算是指標,而且結果的解釋也能非常符合常理 在win32下,指標的長度為32位 4位元組 而fullarray2陣列的長度為1...

陣列名和指標區別

前兩天同學問了我乙個問題 陣列名和指標有什麼區別,或者說這兩者有沒有區別?我回顧了下,大學課堂上老師講的,貌似記得老師說陣列名就相當於指標,比如 一維陣列就是一級指標 二維陣列是二級指標 之類的。結果同學告訴說原來我也是這麼理解的,其實 陣列名與指標有著本質的區別 然後給我推薦了一篇博文。我們經常見...

陣列名和指標的區別

魔幻陣列名 請看程式 本文程式在win32平台下編譯 1.include 2.int main int argc,char argv 3.size 3 1 陣列名不是指標 size 我們先來推翻 陣列名就是指標 的說法,用反證法。證明 陣列名不是指標 假設 陣列名是指標 則 pstr和str都是指標...