陣列和指標的一些理解

2021-05-25 05:23:48 字數 768 閱讀 4300

指標和陣列

一直好讀書不求甚解,本人用了6年以上的c語言,才真正對指標和陣列有些了解。

指標和陣列是一樣?

int a[5] = ;

int *p = a;

sizeof(p) = 4 而 sizeof(a) = 20; 為什麼?

int a[5] = ; extern int *a; 

或者int *p = null;  extern int p;

是否可以這樣用?

指標和陣列的區別  

儲存方式不同,指標存放的僅僅是乙個位址,而陣列是將整個內容做為乙個整體儲存在一起。這也是為什麼sizeof(p)!=sizeof(a)。

從指標和陣列的特性上來看, p裡面存放的是(其指向目標)的位址。a 上存放的是本身的數值。如果extern int *a,那麼編譯器就會把a當做乙個指標,它會把a上的數值當做(其指向目標)的位址,在這種情況當a[0] = 0時,*a == *0;所以定義的陣列時,千萬不要在外部宣告為指標。同樣定義成指標時,也不要將其宣告為陣列。

為什麼會常常把陣列和指標弄混淆

如果我們要得到第乙個例子中陣列的第4個值,我們可以用a[4],也可以用p[4];當使用a[4]時,編譯器會先取出a的位址,再將其位址偏移4個單位,然後得到此位址上的值,同*(a+4)。p[4]是怎麼處理的呢?編譯器會先取出p中存放的位址,注意不是p本身的位址,然後根據其下標,偏移4個單位,最後得到新位址上的值,同*(p+4)。

通過上面發現,指標和陣列其獲取值操作都是基本類似。這也是為什麼很多人會把指標和陣列弄混淆了的原因了。

陣列指標一些理解

printf d p 注意此處是先進行後面的運算p printf d p printf d n p i 此時指標就相當於陣列名 printf 2d p 如果陣列是a 6 則應該列印 printf 2d a 0 與上結果 1 a 是陣列首元素的位址,所以 a 的值和 a 0 的值相同,另一方面,a 0...

關於陣列和指標的一些理解

int a 3 int b a cout b 了解了上述原理後,我們來看看下面這種情況。陣列建立的方式有兩種。第一種 int arr new int 2 cout arr 第二種情況 int arr cout arr 第乙個輸出,接受引數是乙個陣列,隱式轉換成陣列首位址。第二個輸出 arr,這得到的...

c指標的一些理解

c語言所有複雜的指標宣告,都是由各種宣告巢狀構成的。如何解讀複雜指標宣告呢?右左法則是乙個既著名又常用的方法。不過,右左法則其實並不是c標準裡面的內容,它是從c標準的宣告規定中歸納出來的方法。c標準的宣告規則,是用來解決如何建立宣告的,而右左法則是用來解決如何辯識乙個宣告的,兩者可以說是相反的。右左...