簡單回顧一下指針的概念
內(nèi)存會劃分以字節(jié)為單位的空間,每一個字節(jié)都有一個編號(地址/指針)
指針變量可以存放這個地址/指針
注:我們?nèi)粘Kf的指針,一般是指針變量
下面讓我們坐上指針進階的直通車,來到第一站!字符指針
字符指針
代碼示例:
int main(){ char ch = 'w'; char* p= &ch; char* pa = "abcdef"; return 0;}
字符變量ch里面存放了字符w
字符指針p里面存放了ch的地址
指針變量pa里面存放了abcdef字符串的地址,我們并沒有對這個字符串進行初始化。而是直接把它放進了指針變量pa里面。
和前兩行的字符w不同,abcdef是存儲在內(nèi)存中的只讀數(shù)據(jù)區(qū),無法修改,即便通過指針也無法修改。
為了避免理解出錯,我們一般會加上const修飾
const char* pa = "abcdef";
const放在*的左邊
表示const修飾的指針指向的內(nèi)容,表示指針指向的內(nèi)容不能通過指針來改變
但是指針變量本身是可以改變的
const放在*的右邊
表示const修飾的是指針變量本身,指針變量的內(nèi)容不能被修改
但是*pa指針指向的內(nèi)容是可以通過指針來修改的
代碼示例:
int main(){ char arr1[] = "abcdef"; char arr2[] = "abcdef"; const char* str1 = "abcdef"; const char* str2 = "abcdef"; if (arr1 == arr2) printf("arr1==arr2 "); else printf("arr1!=arr2 "); if (str1 == str2) printf("str1==str2 "); else printf("str1!=str2 "); return 0;}
它的結(jié)果如下:
在例子1里面我們提到過,str1和str2這種情況都指向一個常量字符串
既然字符串a(chǎn)bcdef無法被改變,編譯器也沒有必要創(chuàng)建兩個獨立的內(nèi)存空間來存放兩個相同的字符串
所以str1和str2的地址是完全一樣的
而arr1和arr2是完全不同的數(shù)組,它們的首元素地址不一樣,打印的結(jié)果是不相等
typedef關(guān)鍵字
如何使用:
在MSDN中,我們可以查找到typedef的定義
簡單地說,typedef的作用就是把一個已有的類型名換一個新的名字
typedef int* pint;
這句代碼的意思是:將int*命名為pint
pint在使用的時候和int*完全一致
我們?nèi)匀豢梢允褂胕nt*
在結(jié)構(gòu)體里面,我們可以用typedef來縮短原有結(jié)構(gòu)體定義的語句
如:將struct Stu命名為Stu
typedef和#define的區(qū)別
我們同樣可以使用#define語句,進行這項操作
#define PINT int*
定義語句PINT為int*
指針連續(xù)定義
先來了解一下如何正確連續(xù)定義兩個指針
int*pa,*pb;//正確的連續(xù)定義 int*pa,pb;//錯誤//pa是int*類型,而pb是int類型
因為這兩個的情況非常容易搞混,所以我們不建議連續(xù)定義指針
typedef int* pint;#define PINT int* int main(){ pint pa,pb;//可連續(xù)定義指針 //pa-->int* //pb-->int* PINT pa,pb;//等同于int*pa,pb //pa-->int* //pb-->int}
·typedef會產(chǎn)生一個新的變量類型
·#define只是在對應(yīng)位置進行替換
因為typedef產(chǎn)生了一個新的類型,pint為int*,但與int*也有不同
int pa,pb;//pa,pb都是int類型pint pa,pb;//pa,pb都是int*類型
而我們直接用int*進行連續(xù)定義指針變量是錯誤的
int*pa,pb;//錯誤//pa是int*類型,而pb是int類型
你學(xué)會了嗎?我反正是學(xué)廢了。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7048瀏覽量
89073 -
指針
+關(guān)注
關(guān)注
1文章
480瀏覽量
70568 -
代碼
+關(guān)注
關(guān)注
30文章
4790瀏覽量
68650
原文標(biāo)題:【C語言】指針進階第一站:字符指針 & typedef關(guān)鍵字!
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論