【C語言】指針進(jìn)階第一站:字符指針 & typedef關(guān)鍵字!
簡單回顧一下指針的概念
內(nèi)存會劃分以字節(jié)為單位的空間,每一個(gè)字節(jié)都有一個(gè)編號(地址/指針)
指針變量可以存放這個(gè)地址/指針
注:我們?nèi)粘Kf的指針,一般是指針變量

下面讓我們坐上指針進(jìn)階的直通車,來到第一站!字符指針
字符指針
代碼示例:
字符變量ch里面存放了字符w
字符指針p里面存放了ch的地址
指針變量pa里面存放了abcdef字符串的地址,我們并沒有對這個(gè)字符串進(jìn)行初始化。而是直接把它放進(jìn)了指針變量pa里面。
和前兩行的字符w不同,abcdef是存儲在內(nèi)存中的只讀數(shù)據(jù)區(qū),無法修改,即便通過指針也無法修改。
為了避免理解出錯(cuò),我們一般會加上const修飾
const放在*的左邊
表示const修飾的指針指向的內(nèi)容,表示指針指向的內(nèi)容不能通過指針來改變
但是指針變量本身是可以改變的
const放在*的右邊
表示const修飾的是指針變量本身,指針變量的內(nèi)容不能被修改
但是*pa指針指向的內(nèi)容是可以通過指針來修改的
代碼示例:
它的結(jié)果如下:

在例子1里面我們提到過,str1和str2這種情況都指向一個(gè)常量字符串
既然字符串a(chǎn)bcdef無法被改變,編譯器也沒有必要?jiǎng)?chuàng)建兩個(gè)獨(dú)立的內(nèi)存空間來存放兩個(gè)相同的字符串
所以str1和str2的地址是完全一樣的
而arr1和arr2是完全不同的數(shù)組,它們的首元素地址不一樣,打印的結(jié)果是不相等
typedef關(guān)鍵字
如何使用:
在MSDN中,我們可以查找到typedef的定義

簡單地說,typedef的作用就是把一個(gè)已有的類型名換一個(gè)新的名字
這句代碼的意思是:將int*命名為pint
pint在使用的時(shí)候和int*完全一致
我們?nèi)匀豢梢允褂胕nt*
在結(jié)構(gòu)體里面,我們可以用typedef來縮短原有結(jié)構(gòu)體定義的語句
如:將struct Stu命名為Stu
typedef和#define的區(qū)別
我們同樣可以使用#define語句,進(jìn)行這項(xiàng)操作
定義語句PINT為int*
指針連續(xù)定義
先來了解一下如何正確連續(xù)定義兩個(gè)指針
因?yàn)檫@兩個(gè)的情況非常容易搞混,所以我們不建議連續(xù)定義指針
? ? ? ? ·typedef會產(chǎn)生一個(gè)新的變量類型
? ? ? ? ·#define只是在對應(yīng)位置進(jìn)行替換
因?yàn)閠ypedef產(chǎn)生了一個(gè)新的類型,pint為int*,但與int*也有不同
而我們直接用int*進(jìn)行連續(xù)定義指針變量是錯(cuò)誤的
你學(xué)會了嗎?我反正是學(xué)廢了。

為了幫助大家,輕松,高效學(xué)習(xí)C語言/C++,給大家分享我收集的資源,從最零基礎(chǔ)開始的,幫助大家在學(xué)習(xí)C語言的道路上披荊斬棘!
微信公眾號:C語言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長比自己琢磨更快哦!大家也要把握住大學(xué)的時(shí)光,抓住成長的每一次機(jī)會哦~
編程學(xué)習(xí)書籍分享:

粉絲編程交流:
