之前,剛剛學習c語言的時候,學習其它資料型別的時候,感覺很好理解,但是學到指標的時候,筆者就蒙蔽了,因為看到課本上的文字,雲裡霧裡的,什麼指標,什麼指標變數,對於筆者來說都是傻傻分不清,感覺指標和指標變數好像一樣,或者試圖去背下來,但是老是搞混。那時候不知道,我的心思是在忙於社團工作,還是在哪個漂亮女孩身上,反正就是沒好好學習,所以直到現在,在學習了計算機原理之後,重新開啟c語言的課本(ps不是和原來的那本一樣的,是疫情前,我在學校圖書館隨便借的),重新看了指標的定義之後,突然豁然開朗。
其意思應該是這樣。首先,你要明白什麼是變數,變數其實就是記憶體儲存單元的乙個別名,而位址才是這個儲存單元的真實名稱。
對於電腦來說,所有資料都存在記憶體當中,每乙個記憶體都有乙個獨一無二的編號,在不同作用域下,可以有相同的變數名,但是,在電腦中,相同變數名的位址卻是不相同的。這就好比,在我們中國,叫李明的人很多,李明這個名稱相當於變數名,但是每個李明的身份證號卻是獨一無二的,這個身份證號就相當於記憶體位址。
而且計算機,只能通過位址來尋找記憶體單元,進而對這個記憶體單元的資料進行運算,我們使用這些語言的人,為了方便,不可能直接用乙個記憶體位址去存放乙個資料,所以聰明的先輩們模擬現實世界,人名與身份證號這個關係,而創造了變數。
首先,我們在使用變數進行運算的時候,計算機會把這個變數名翻譯成記憶體位址,比如0x00427c5d,然後根據這個位址所儲存的變數資料,進行運算。
在明白了變數的作用之後,在說一下c語言的其它資料型別,int:整型,float:單精度浮點型,double:雙精度浮點型,等等……我覺得初學者在學習這些資料型別的時候,應該不難理解,因為它們所表示的型別,和我們一直以來所接受的教育學到的資料型別,比如數學上的100,100.5,5.5,6.66666,這些都一樣,我們自然而然的很容易接受。
所以在學習這些int型變數,float型變數,double型變數所儲存的資料,進行運算的時候,我們很容易就使用它們,寫出乙個實現加法,減法這些小程式,可是有些人在學習到指標就犯傻了。原因有很多,第一,可能是教學的老師,在講解指標的時候,過於聖神化指標這玩意,把它說的很難,第二可能是像用位址儲存資料這些觀念沒辦法很好的理解,這些人有時候得學到計算機原理的一些知識才可能明白,比如我,哈哈哈……
現在開始正文:
1.指標
什麼是指標,其實指標就是位址,在我們這些語言的使用者,在定義乙個變數的時候,系統就會把這個變數的位址給翻譯出來,這個變數的位址就是指標,指標就指向了這個變數.
int a = 10;像上面這個式子,a就代表10,系統會給a隨機分配乙個記憶體位址,這個位址就叫做指標。
2.指標變數
什麼是指標變數,其實指標變數,和其它一些資料型別的變數的意義都意義,比如整型變數,浮點型變數,這些變數都是來儲存資料的,那麼指標變數也是和它們一樣,也是來儲存資料的,只不過不同型別的變數儲存不同的資料,比如 int a = 10, char a = 'c'。所以c語言也給指標變數乙個儲存具體型別的資料,指標變數儲存的都是記憶體位址。
課本上這樣表明指標變數的意義:指標變數必須依託它所指向的變數,才能有實際意義。為了表示指標變數和它所指向的變數之間的關係,c語言中使用 * 來表示這種指向。例如下例子:
int i = 0以上的語句,表示了指標變數p指向了乙個變數 i,而*p就表示p所指向的變數,也就是*p = i =0,上面可以說很直觀了,因為它直接就把 i 賦值給 *p 了,所以 *p 就等於 i ,那麼p表示什麼呢,其實就是 i 的位址, & i。(&是取址符);int * p = i;
型別說明符 * 指標變數名型別說明符可以是很多種資料型別,比如 int ,char ,double ,float,char,這些等等……
int i = 10;int *p =i;
那麼 p 與 &i 就相等;
而*p =i;
那麼 *p = *& i = i;
此時 p = &i;
p = &j;//
此時p = &j,*p = j
筆記就記錄到這裡。
總結:1.其實指標就是記憶體位址,確切的說指標表示乙個變數的記憶體位址;
2.指標變數是儲存指標的,也就是指標變數儲存的是乙個變數的記憶體位址。
3.指標變數的語法格式 int *p = 3;char *p = 'c',float * p = '6.6' ,double * p = '6.666',等等這些;
4.指標變數和int 型變數 ,float型變數,char型變數實質是同一類,只不過儲存著不同型別的資料。例子:int ---->6;float---->6.6,double----->6.666;char----->'c';int * ------>'0x00427cd'
對C語言指標的理解
c語言中有很多變數,比如說我們常見的int,float變數,而指標變數也是一種變數,不過不一樣的是,指標變數裡面存放的是位址。假設下面的是計算機的記憶體,每乙個小格格代表乙個位元組 1byte 一位元組等於8個位元位 1byte 8bit,能存放8位二進位制數 在c語言中,int佔4個位元組,cha...
對C語言中指標的入門理解
當指標p的值為物件x的位址時,我們一般會說 p指向x 接著進行 xiaohong xiaoli 的複製,我們就可以得出 小紅喜歡小李 xiaolin xiaohong的資料型別是 指向int型變數的指標型 xiaolin xiaozhang xiaohong xiaowang 從以上賦值語句也可以發...
C語言指標的理解
什麼是指標?指標也是一種變數,存放的是某塊記憶體的位址。我們知道,記憶體可以理解為是按位元組被分割成若干塊的,每一位元組都對應著乙個編號,並且這些編號從小到大依次排列,這個編號就是它的位址,獨一無二,而指標變數中的值就是這些編號 例如如下 的結果 include include int main 這...