簡(jiǎn)單回顧一下指針的概念
內(nèi)存會(huì)劃分以字節(jié)為單位的空間,每一個(gè)字節(jié)都有一個(gè)編號(hào)(地址/指針)
指針變量可以存放這個(gè)地址/指針
注:我們?nèi)粘Kf的指針,一般是指針變量
下面讓我們坐上指針進(jìn)階的直通車,來到第一站!字符指針
字符指針
代碼示例:
int main(){ char ch = 'w'; char* p= &ch; char* pa = "abcdef"; return 0;}
字符變量ch里面存放了字符w
字符指針p里面存放了ch的地址
指針變量pa里面存放了abcdef字符串的地址,我們并沒有對(duì)這個(gè)字符串進(jìn)行初始化。而是直接把它放進(jìn)了指針變量pa里面。
和前兩行的字符w不同,abcdef是存儲(chǔ)在內(nèi)存中的只讀數(shù)據(jù)區(qū),無法修改,即便通過指針也無法修改。
為了避免理解出錯(cuò),我們一般會(huì)加上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這種情況都指向一個(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的定義
簡(jiǎn)單地說,typedef的作用就是把一個(gè)已有的類型名換一個(gè)新的名字
typedef int* pint;
這句代碼的意思是:將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)操作
#define PINT int*
定義語句PINT為int*
指針連續(xù)定義
先來了解一下如何正確連續(xù)定義兩個(gè)指針
int*pa,*pb;//正確的連續(xù)定義 int*pa,pb;//錯(cuò)誤//pa是int*類型,而pb是int類型
因?yàn)檫@兩個(gè)的情況非常容易搞混,所以我們不建議連續(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會(huì)產(chǎn)生一個(gè)新的變量類型
·#define只是在對(duì)應(yīng)位置進(jìn)行替換
因?yàn)閠ypedef產(chǎn)生了一個(gè)新的類型,pint為int*,但與int*也有不同
int pa,pb;//pa,pb都是int類型pint pa,pb;//pa,pb都是int*類型
而我們直接用int*進(jìn)行連續(xù)定義指針變量是錯(cuò)誤的
int*pa,pb;//錯(cuò)誤//pa是int*類型,而pb是int類型
你學(xué)會(huì)了嗎?我反正是學(xué)廢了。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7241瀏覽量
91029 -
指針
+關(guān)注
關(guān)注
1文章
484瀏覽量
71012 -
代碼
+關(guān)注
關(guān)注
30文章
4887瀏覽量
70266
原文標(biāo)題:【C語言】指針進(jìn)階第一站:字符指針 & typedef關(guān)鍵字!
文章出處:【微信號(hào):cyuyanxuexi,微信公眾號(hào):C語言編程學(xué)習(xí)基地】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
跳轉(zhuǎn)表、指針數(shù)組和函數(shù)指針的概念
淺析函數(shù)指針與指針函數(shù)及其應(yīng)用
C語言中指針函數(shù)和函數(shù)指針的概念及應(yīng)用示例
C語言中空指針和野指針的概念及產(chǎn)生原因
2.5 C語言入職例程二:指針 精選資料分享
嵌入式指針的相關(guān)資料分享
C51語言的指針、結(jié)構(gòu)、聯(lián)合和枚舉
C語言指針概念詳解

C++程序設(shè)計(jì)教程之指針的詳細(xì)資料說明

評(píng)論