對指標的一點感悟

2021-07-03 09:56:42 字數 2201 閱讀 6032

首先來看2張:

這個程式是將二維陣列 a 裡面的元素輸出出來,但是左圖給指標賦值可以,但是右圖不行,為什麼?

因為p是乙個陣列,對於陣列而言,p是乙個常量,常量的位址是固定的,所以p=a相當於給常量賦值,這當然是不行的,語法上就是錯誤,而在左邊,相當於對陣列p裡的元素賦值,元素的位址雖然確定了,但是元素的內容可以修改,他的元素內容是兩個指向整型變數的指標,指標也是一種資料型別,更是一種變數,所以可以賦值

但是下圖為什麼可以賦值,請注意,右圖的p首先是與指標符號相結合的,是乙個指標,而指標是乙個變數,和一般的變數沒有區別,所以可以賦值,而左圖或中圖,p首先是乙個陣列,陣列名是常量,所以不能直接給陣列名賦值,這就是右圖在指定的地方會報錯的原因

char   a[4],*p;

char   (*pa)[4],*pb;

pa = &a;

pb = &a[0];

&a和&a[0]都表示陣列a的首位址,但是這兩者有區別,&a[0]就是乙個普通的char型變數的首位址,和p沒有什麼區別,指向乙個記憶體單元;而&a不是乙個簡單的char型指標,而是char  *[4]型指標,指向的是4個記憶體單元,所以使用

p = &a的時候就會報錯,所以當給指標賦值的時候,還要判斷這兩者是否指向同樣大小的記憶體單元。陣列指標pa和pb所指向的是同乙個起始位址(也就是pa=pb的),但是由於指標的型別不同,所指向的記憶體單元的大小不一樣。pb到pb+1的變化大小是由它所指向的型別決定,由於指標是字元指標,所以變化乙個位元組,假如是整型指標,那就要變化4個位元組;而pa到pa+1的變化大小為4個位元組,所以在做指標運算時候尤其注意指標所指向的型別。

注意一點:看乙個位址是否能複製給指標變數,主要就看該位址

+1和指標變數+1後,各自位址改變的長度是否一樣

對於指標,主要包括2部分,乙個是指標符號*,另乙個就是指標變數,當然這個變數可以是普通的變數,也可以是陣列或者函式,對於指標符號用在定義宣告裡面時,它就是個符號,表示變數是乙個指標型別,但是當用在語句中的時,它就是指向指標變數所指向的位址裡面的內容;

而對於指標變數,記住2點:

1、它是乙個變數

指標變數p和普通變數一樣,同樣需要儲存該變數的記憶體和位址,這個位址就是&p,而對於儲存該位址的記憶體,int,char,double三種型別的指標在32位系統上都佔4個位元組的記憶體,但是像普通變數一樣,指標也有值,和其他普通值的唯一一點區別就是,該值同樣代表著計算機內的一塊位址,換句話說,它的值和計算機內某一塊記憶體首位址的名字是相同的,當在執行語句中,用指標命令符作用在該指標上的時候,它又指向該位址裡面儲存的值。

還要注意一點的是:指標變數占用記憶體的大小與它本身的型別無關,而是由計算機決定的,但是不同型別的指標變數所指向的記憶體區域的大小並不相同

example:

char           a=1, *pa;

int               b=2, *pb;

double       c=3, *pc;

pa = &a;

pb = &b;

pc = &c;

在這個定義中,pa,pb,pc分別在記憶體中占用4個位元組,但是它們所指向的位址&a,&b,&c分別1個位元組,4個位元組和8個位元組

************************************二維陣列名和指標的關係****************************************

int   a[2][2],*p;

對於a,&a,a[0],&a[0],a[0][0],&a[0][0]和指標p的關係,陣列名a其實就是&a[0],值和型別都是相同的。而&a是整個陣列的指標(不論是幾維陣列,&a都表示整個陣列的指標),&a+1是變化到了陣列a的4個元素以外的空間;而a[0]的值和&a[0][0]的值是相同的,就像a和&a[0]一樣,屬於同一型別。那a[0][0]應該表示什麼呢?當然是陣列第乙個元素的值了。其中a,&a,a[0],&a[0],&a[0][0]的值是相同的,都是陣列的首位址,但是它們步進的大小是不同的,其中a=&a[0],步進為2;a[0]=&a[0][0],步進為1;而&a步進為4

我對大學的一點感悟

有人說 大學,大學,大致學習一下!也有不少人宣傳 大學是學不到什麼,學的東西在工作中根本沒用,重要的在於能力的培養 等認識。於是不少同學對知識和能力有了錯誤的認識,甚至將它們視為對立的兩個方面而完全放棄了求知,一味追求提高自己的 能力 的確,我們需要通過進學生會,參加各種活動,校外兼職等來提高我們的...

對因與果的一點感悟

對因與果的一點感悟 紅朝儒生 2016 10 26 關鍵字 因果 感悟 簡介 萬事有因必有果,有果必有因。世界宇宙萬事萬物,沒有無果之因,亦沒有無因之果。萬事有因必有果,有果必有因。世界宇宙萬事萬物,沒有無果之因,亦沒有無因之果。好。那麼人生在世,是果,那麼因在 有的人混得好,有的人混得差,這也是果...

對單元測試的一點感悟

想 當年畢業設計就是測試驅動開發,所以從剛入行開始就對單元測試 測試驅動開發有比較深入的認識,剛開始一直作為敏捷開發的忠實粉絲。但是幾年工作下來,我 開始對單元測試持矛盾的態度 單元測試當然是一種很好的創舉,但是具體使用當中,它卻經常會產生 這當然不是因為單元測試這一思想有問題,而是實踐 這一思想的...