天天看點

大一C語言學習筆記(7)---指針篇--什麼是指針?什麼是指針變量?取位址符“&”的作用是什麼?位址運算符“*”的作用是什麼,怎麼了解兩者?

第一,指針就是位址,而位址又是什麼,舉個栗子:一個酒店有很多個房間,每個房間上都有着不一樣的房間号,而這些位址就類似于這些房間号;那麼每個房間号又是多少位的呢?就32位作業系統而言,每個房間号也就是32位的,“32位”指的是二進制的32位,而1位元組代表8位,是以1個位址就占4個位元組,而對于 int a=1,盡管我們給變量指派一位數這麼小的數,他在記憶體單元中依舊是以 32位 儲存的,1位數就1位數呗,前面補31個0不就完了;我們可以通過位址來精确地找到房間,這些房間就相當于記憶體單元,那什麼又是記憶體單元?想要使用變量,就先要在記憶體中占用一塊記憶體單元,然後才能向記憶體中儲存不同的資料......

“指針是C語言的靈魂”這句話一開始我沒怎麼明白,現在接觸了指針,終于知道為什麼這麼說了,因為。。。。難,真難;下面說一下我對這句話的見解:

C語言擁有着其他語言所沒有的特性---直接通路記憶體空間,并進行操作,與這個功能對應的工具便是指針。部落客剛開始用 DEV-C++ 那段時間嘛,就有時候寫着寫着系統提醒我有病毒,而且每次都是我用 Dev-C++ 的時候,我就納悶了,我這用的好好的,怎麼會是病毒軟體呢?現在我大概明白了,指針會直接操作記憶體空間嘛,而可以随意進出一台電腦的記憶體空間,是什麼東西?病毒呗!那身為一個小菜雞,我怎麼會那麼早就用到指針呢,你還真别說 ,scanf(“%d”,&a)“&”這小玩意你看像不像取位址符(手動狗頭);總之C語言的指針既是高效的,又是危險的。我的電腦是這麼對我自己敲的代碼的:

大一C語言學習筆記(7)---指針篇--什麼是指針?什麼是指針變量?取位址符“&”的作用是什麼?位址運算符“*”的作用是什麼,怎麼了解兩者?

我一口鹽汽水噴死你,我自己寫的東西,擔心個錘子     (╯°□°)╯︵ ┻━┻

#什麼是指針?什麼是指針變量?取位址符“&”的作用是什麼?位址運算符“*”的作用是什麼,怎麼了解兩者?

指針就是位址,而位址又是什麼,舉個栗子:一個酒店有很多個房間,每個房間上都有着不一樣的房間号,而這些位址就類似于這些房間号;那麼每個房間号又是多少位的呢?就32位作業系統而言,每個房間号也就是32位的,“32位”指的是二進制的32位,而1位元組代表8位,是以1個位址就占4個位元組,而對于 int a=1,盡管我們給變量指派一位數這麼小的數,他在記憶體單元中依舊是以 32位 儲存的,1位數就1位數呗,前面補31個0不就完了;我們可以通過位址來精确地找到房間,這些房間就相當于記憶體單元,那什麼又是記憶體單元?想要使用變量,就先要在記憶體中占用一塊記憶體單元,然後才能向記憶體中儲存不同的資料;

       舉個栗子:  

    (&88)是位址;

    (&變量 a)也是位址;

指針變量不同于指針,指針隻是位址罷了,而指針變量就是儲存位址的一種變量,是以指針變量又叫做位址變量;它也像儲存其他資料類型的變量一樣,隻不過儲存的東西是位址;

       int *q,double *q,char *q,這些都是指針變量,隻不過他們所指向的記憶體所儲存的資料的類型不同罷了;

       在定義了 int *q;的前提下,q  就是指針變量;

取位址符“&”的作用就像它的名字一樣,它可以把變量的位址取出來,也可以把88這樣的數字等在記憶體中占用的位址取出來;

       舉個栗子:

       運作結果:

指針運算符“*”的作用就是根據指針變量所提供的位址來找到“這個位址所對應的記憶體裡放了什麼東西”;是以說其實“*”和“&”其實就像是兩個方向恰好相反的指路牌:“*”是由位址變量指向什麼東西,而“&”就是由什麼東西指向指針變量;是以說“*”可以讀作“位址指向XX”,“&”可以讀作“XX的位址”

        輔助了解代碼:

        運作結果:

繼續閱讀