亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

帶你了解C語言的指針

2020-02-24 14:24:23
字體:
供稿:網(wǎng)友

對(duì)于C語言指針是不是很多小伙伴們都不了解呢?我們?cè)诹私庵羔樀臅r(shí)候多多少少會(huì)有一些比較復(fù)雜的,那么下面就讓武林小編帶你了解C語言的指針吧,希望本文內(nèi)容對(duì)你有所幫助。

指針、引用和取值

什么是指針?什么是內(nèi)存地址?什么叫做指針的取值?指針是一個(gè)存儲(chǔ)計(jì)算機(jī)內(nèi)存地址的變量。在這份教程里“引用”表示計(jì)算機(jī)內(nèi)存地址。從指針指向的內(nèi)存讀取數(shù)據(jù)稱作指針的取值。指針可以指向某些具體類型的變量地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。本文會(huì)對(duì)上述所有指針類型進(jìn)行探討。

根據(jù)出現(xiàn)的位置不同,操作符 * 既可以用來聲明一個(gè)指針變量,也可以用作指針的取值。當(dāng)用在聲明一個(gè)變量時(shí),*表示這里聲明了一個(gè)指針。其它情況用到*表示指針的取值。

&是地址操作符,用來引用一個(gè)內(nèi)存地址。通過在變量名字前使用&操作符,我們可以得到該變量的內(nèi)存地址。

?

?

// 聲明一個(gè)int指針
int *ptr;
// 聲明一個(gè)int值
int val = 1;
// 為指針分配一個(gè)int值的引用
ptr = &val;
// 對(duì)指針進(jìn)行取值,打印存儲(chǔ)在指針地址中的內(nèi)容
int deref = *ptr;
printf("%d/n", deref);

?

第2行,我們通過*操作符聲明了一個(gè)int指針。接著我們聲明了一個(gè)int變量并賦值為1。然后我們用int變量的地址初始化我們的int指針。接下來對(duì)int指針取值,用變量的內(nèi)存地址初始化int指針。最終,我們打印輸出變量值,內(nèi)容為1。

第6行的&val是一個(gè)引用。在val變量聲明并初始化內(nèi)存之后,通過在變量名之前使用地址操作符&我們可以直接引用變量的內(nèi)存地址。

第8行,我們?cè)僖淮问褂?操作符來對(duì)該指針取值,可直接獲得指針指向的內(nèi)存地址中的數(shù)據(jù)。由于指針聲明的類型是int,所以取到的值是指針指向的內(nèi)存地址存儲(chǔ)的int值。

這里可以把指針、引用和值的關(guān)系類比為信封、郵箱地址和房子。一個(gè)指針就好像是一個(gè)信封,我們可以在上面填寫郵寄地址。一個(gè)引用(地址)就像是一個(gè)郵件地址,它是實(shí)際的地址。取值就像是地址對(duì)應(yīng)的房子。我們可以把信封上的地址擦掉,寫上另外一個(gè)我們想要的地址,但這個(gè)行為對(duì)房子沒有任何影響。

void指針、NULL指針和未初始化指針

一個(gè)指針可以被聲明為void類型,比如void *x。一個(gè)指針可以被賦值為NULL。一個(gè)指針變量聲明之后但沒有被賦值,叫做未初始化指針。

?

int *uninit; // int指針未初始化
int *nullptr = NULL; // 初始化為NULL
void *vptr; // void指針未初始化
int val = 1;
int *iptr;
int *castptr;
?
// void類型可以存儲(chǔ)任意類型的指針或引用
iptr = &val;
vptr = iptr;
printf("iptr=%p, vptr=%p/n", iptr, vptr);
?
// 通過顯示轉(zhuǎn)換,我們可以把一個(gè)void指針轉(zhuǎn)成
// int指針并進(jìn)行取值
castptr = (int *)vptr;
printf("*castptr=%d/n", *castptr);
?
// 打印null和未初始化指針
printf("uninit=%p, nullptr=%p/n", uninit, nullptr);
// 不知道你會(huì)得到怎樣的返回值,會(huì)是隨機(jī)的垃圾地址嗎?
// printf("*nullptr=%d/n", nullptr);
// 這里會(huì)產(chǎn)生一個(gè)段錯(cuò)誤
// printf("*nullptr=%d/n", nullptr);

?

執(zhí)行上面的代碼,你會(huì)得到類似下面對(duì)應(yīng)不同內(nèi)存地址的輸出。

?

?

iptr=0x7fff94b89c6c, vptr=0x7fff94b89c6c
*castptr=1
uninit=0x7fff94b89d50, nullptr=(nil)

?

第1行我們聲明了一個(gè)未初始化int指針。所有的指針在賦值為NULL、一個(gè)引用(地址)或者另一個(gè)指針之前都是未被初始化的。第2行我們聲明了一個(gè)NULL指針。第3行聲明了一個(gè)void指針。第4行到第6行聲明了一個(gè)int值和幾個(gè)int指針。

第9行到11行,我們?yōu)閕nt指針賦值為一個(gè)引用并把int指針賦值為void指針。void指針可以保存各種其它指針類型。大多數(shù)時(shí)候它們被用來存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)??梢宰⒁獾?,第11行我們打印了int和void指針的地址。它們現(xiàn)在指向了同樣的內(nèi)存地址。所有的指針都存儲(chǔ)了內(nèi)存地址。它們的類型只在取值時(shí)起作用。

第15到16行,我們把void指針轉(zhuǎn)換為int指針castptr。請(qǐng)注意這里需要顯示轉(zhuǎn)換。雖然C語言并不要求顯示地轉(zhuǎn)換,但這樣會(huì)增加代碼的可讀性。接著我們對(duì)castptr指針取值,值為1。

第19行非常有意思,在這里打印未初始化指針和NULL指針。值得注意的是,未初始化指針是有內(nèi)存地址的,而且是一個(gè)垃圾地址。不知道這個(gè)內(nèi)存地址指向的值是什么。這就是為什么不要對(duì)未初始化指針取值的原因。最好的情況是你取到的是垃圾地址接下來你需要對(duì)程序進(jìn)行調(diào)試,最壞的情況則會(huì)導(dǎo)致程序崩潰。

NULL指針被初始化為o。NULL是一個(gè)特殊的地址,用NULL賦值的指針指向的地址為0而不是隨機(jī)的地址。只有當(dāng)你準(zhǔn)備使用這個(gè)地址時(shí)有效。不要對(duì)NULL地址取值,否則會(huì)產(chǎn)生段錯(cuò)誤。

指針和數(shù)組

C語言的數(shù)組表示一段連續(xù)的內(nèi)存空間,用來存儲(chǔ)多個(gè)特定類型的對(duì)象。與之相反,指針用來存儲(chǔ)單個(gè)內(nèi)存地址。數(shù)組和指針不是同一種結(jié)構(gòu)因此不可以互相轉(zhuǎn)換。而數(shù)組變量指向了數(shù)組的第一個(gè)元素的內(nèi)存地址。

一個(gè)數(shù)組變量是一個(gè)常量。即使指針變量指向同樣的地址或者一個(gè)不同的數(shù)組,也不能把指針賦值給數(shù)組變量。也不可以將一個(gè)數(shù)組變量賦值給另一個(gè)數(shù)組。然而,可以把一個(gè)數(shù)組變量賦值給指針,這一點(diǎn)似乎讓人感到費(fèi)解。把數(shù)組變量賦值給指針時(shí),實(shí)際上是把指向數(shù)組第一個(gè)元素的地址賦給指針。

?

?

int myarray[4] = {1,2,3,0};
int *ptr = myarray;
printf("*ptr=%d/n", *ptr);
?
// 數(shù)組變量是常量,不能做下面的賦值
// myarray = ptr
// myarray = myarray2
// myarray = &myarray2[0]

?

第1行初始化了一個(gè)int數(shù)組,第2行用數(shù)組變量初始化了一個(gè)int指針。由于數(shù)組變量實(shí)際上是第一個(gè)元素的地址,因此我們可以把這個(gè)地址賦值給指針。這個(gè)賦值與int *ptr = &myarray[0]效果相同,顯示地把數(shù)組的第一個(gè)元素地址賦值到了ptr引用。這里需要注意的是,這里指針需要和數(shù)組的元素類型保持一致,除非指針類型為void。

指針與結(jié)構(gòu)體

就像數(shù)組一樣,指向結(jié)構(gòu)體的指針存儲(chǔ)了結(jié)構(gòu)體第一個(gè)元素的內(nèi)存地址。與數(shù)組指針一樣,結(jié)構(gòu)體的指針必須聲明和結(jié)構(gòu)體類型保持一致,或者聲明為void類型。

?

?

struct person {
? int age;
? char *name;
};
struct person first;
struct person *ptr;
?
first.age = 21;
char *fullname = "full name";
first.name = fullname;
ptr = &first;
?
printf("age=%d, name=%s/n", first.age, ptr->name);

?

第1至6行聲明了一個(gè)person結(jié)構(gòu)體,一個(gè)變量指向了一個(gè)person結(jié)構(gòu)體和指向person結(jié)構(gòu)體的指針。第8行為age成員賦了一個(gè)int值。第9至10行我們聲明了一個(gè)char指針并賦值給一個(gè)char數(shù)組并賦值給結(jié)構(gòu)體name成員。第11行我們把一個(gè)person結(jié)構(gòu)體引用賦值給結(jié)構(gòu)體變量。

第13行我們打印了結(jié)構(gòu)體實(shí)例的age和name。這里需要注意兩個(gè)不同的符號(hào),'.' 和 ‘->' 。結(jié)構(gòu)體實(shí)例可以通過使用 ‘.' 符號(hào)訪問age變量。對(duì)于結(jié)構(gòu)體實(shí)例的指針,我們可以通過 ‘->' 符號(hào)訪問name變量。也可以同樣通過(*ptr).name來訪問name變量。

上文中小編帶你了解C語言的指針之后你是否明白了呢?希望這份簡短的概述能夠有助于了解不同的指針類型。在后續(xù)的博文中我們會(huì)探討其它類型的指針和高級(jí)用法。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

午夜精品一区二区三级视频| 欧美一区二区大片| 免费不卡av网站| 中文一区二区在线观看| 日韩欧美一区二区三区免费观看| 亚洲激情女人| 成人久久精品视频| 久精品免费视频| 囯产精品一品二区三区| 成年人黄视频网站| 欧美孕妇孕交黑巨大网站| 国产精品诱惑| 男男视频亚洲欧美| 国产成人无码一区二区在线播放| 在线视频日韩欧美| 国产精品探花在线播放| 欧美性色aⅴ视频一区日韩精品| av大片在线播放| 六月婷婷综合网| 色欲av无码一区二区三区| 欧美精品视频www在线观看| 美女翘臀白浆直流视频| 秋霞av亚洲一区二区三| 97av在线影院| www日本高清视频| 91原色影院| 亚洲最大黄网| 国产在线观看无码免费视频| 中文字幕精品一区二区三区精品| 自拍偷拍欧美| 欧美精品18+| 少妇av一区二区三区无码| 亚洲天堂一区二区三区| 原谅我中文字幕| 91精品国产自产精品男人的天堂| 久久国产精品久久w女人spa| 国产精品资源在线看| 亚洲蜜桃精久久久久久久久久久久| 91美女在线免费观看| 一级中文字幕一区二区| 北岛玲日韩精品一区二区三区| 欧美一区二区三区视频免费| www.亚洲激情| 国产精品久久久免费看| 性生交免费视频| 国产精品美女视频免费观看软件| 国产免费高清| 欧美视频精品一区| 一区二区乱子伦在线播放| 国产真实乱偷精品视频| av网址在线播放| 日韩一级大片| 久久免费视频网| 日韩一区二区电影在线观看| 国产91色在线免费| 亚洲国产精品久久久久婷婷软件| 自拍偷拍亚洲精品| 蜜臀久久精品| 久久国产精品一区| 91视频一区二区| 国产在线精品一区二区不卡| 久久精品国产福利| 久久久国产精品一区二区三区| 一个人看的免费视频色| 懂色av一区二区三区免费观看| 欧美激情办公室videoshd| 日韩精品一区二区视频| 久久小说免费下载| 91女厕偷拍女厕偷拍高清| 55av亚洲| 亚洲视频在线网| 欧美日韩国产精品成人| 午夜欧美精品久久久久久久| 九七电影院97理论片久久tvb| 午夜久久福利视频| 欧美久久一区| 99久免费精品视频在线观78| 国产二级片在线观看| 亚洲欧美综合在线精品| 国产一国产二国产三| 99riav视频在线观看| 狠狠操狠狠色综合网| 亚洲福利视频网| 国语对白精品一区二区| 91中文字幕精品永久在线| 成人中文字幕在线观看| 中文日本高清免费| 日韩精品在线观看视频| 国产精品av一区二区三区| 日韩激情欧美| 丰满熟女一区二区三区| 波多野结衣喷潮| 欧洲精品在线观看| 亚洲国产aⅴ精品一区二区三区| 星空无限传媒在线| 亚洲欧洲日韩| 美女网站色免费| 女人被男人躁得好爽免费视频| 中文视频在线观看| 日韩欧美精品一区二区| 水中色av综合| 97中文在线观看| 一区二区三区在线免费| 午夜免费高清视频| 制服.丝袜.亚洲.中文.综合| 男人猛进猛出女人屁股视频| 中文字幕人成一区| 亚洲爆乳无码一区二区三区| 欧美中日韩一区二区三区| 欧美成人家庭影院| 精品国产123区| 丁香花在线影院观看在线播放| 三上悠亚 电影| 亚洲一二三四五六区| 国产高清视频网| 亚洲午夜av久久乱码| 无码h肉动漫在线观看| 国产一区导航| 国产不卡在线观看| 欧美国产精品劲爆| 国产精品乱子乱xxxx| 久久久久久久久久久99999| 国产精品久久久爽爽爽麻豆色哟哟| 92国产精品| 新67194成人永久网站| 日韩综合在线| 国内精品久久久久久久久| 久色婷婷小香蕉久久| 高清一区二区视频| 欧美日韩综合视频网址| 欧美大片一区二区三区| 国产一级片在线| 丰满少妇xoxoxo视频| a成人v在线| 色哦色哦哦色天天综合| 精品一区二区三区的国产在线观看| av电影在线免费观看| 久久九九精品| 日韩在线观看视频一区二区| 黄色春季福利在线看| 97视频人免费观看| 色综合久久九月婷婷色综合| 亚洲精品一区二区三区不卡| 极品少妇一区二区三区| 亚州成人av在线| 一本之道久久| 成人在线免费看黄| 日韩禁在线播放| 中文字幕理论片| 新狼窝色av性久久久久久| 五月激情婷婷在线| 91大片在线观看| 狠狠躁天天躁日日躁欧美| 国产成人精品久久一区二区小说| 成人在线免费观看av| 亚洲女优视频| 亚洲三级免费观看| 亚洲欧美精品中文字幕在线| 中文字幕av在线免费观看| 国产拍在线视频| 91麻豆精品国产91久久久| 欧美精品99久久久**| 偷拍视频一区二区三区| 久久久精品一区二区涩爱| 91嫩草|国产丨精品入口| 久久6免费视频| 国产熟女一区二区丰满| juliaann成人作品在线看| 亚洲最大免费| 亚洲亚洲免费| 久久先锋资源网| 国产freexxxx性播放麻豆| 欧美三级网页| 日本一区二区不卡在线| 精品日韩av一区二区| av毛片在线免费看| 玖玖在线视频| 日本一区高清在线视频| 在线欧美日韩| 国产伦理久久久久久妇女| 国产精品亚洲综合天堂夜夜| 精品久久久久久中文字幕动漫| 天天av天天翘天天综合网色鬼国产| 最近中文字幕2019免费| 亚洲精品专区| 成人动漫精品一区二区| 亚洲成a人片在线| 黄色片在线观看免费| 欧美极品少妇xxxxx| 国产丝袜在线播放| 一本大道久久a久久精品综合| av在线亚洲一区| 超碰人人人人人人人| 久草中文视频| 无码小电影在线观看网站免费| 天天操夜夜操夜夜操| 美洲精品一卡2卡三卡4卡四卡| 日韩影视在线| 亚洲精品之草原avav久久| 午夜欧美2019年伦理| 欧美精品久久一区二区三区| 成人国产精品久久久久久亚洲| 国产欧美一区二区三区鸳鸯浴| 久久婷婷久久一区二区三区| 欧美猛男超大videosgay| 日本不卡免费高清视频| 奇米影视狠狠狠| 欧美激情视频一区二区三区| 全免费一级毛片免费看| 懂色av蜜臀av粉嫩av分享吧| 91极品视频在线观看| 日韩电影免费观看在| 久久天天久久| www.黄在线观看| 亚洲精品视频在线播放| 二吊插入一穴一区二区| 国产精品久久| 中文字幕在线中文字幕二区| 亚洲av无码精品一区二区| 日本韩国精品一区二区| 精品乱码一区内射人妻无码| 国产一级久久久久毛片精品| 九七电影韩国女主播在线观看| 亚洲精品久久久狠狠狠爱| 午夜精品久久久久久久男人的天堂| 日本黄网免费一区二区精品| 永久看片925tv| 日本中文字幕高清| 国产精品你懂得| 视频一区视频二区中文| 日本亚洲欧洲色| 欧美午夜精品一区| …久久精品99久久香蕉国产| 国产v综合ⅴ日韩v欧美大片| 一插菊花综合| 高跟丝袜欧美一区| 亚洲一区欧美在线| 人与牲动交xxxxbbb| 偷拍自拍亚洲| 偷拍精品精品一区二区三区| 国产无码精品在线播放| 国产亚洲欧洲在线| 日本福利一区| 日本一区美女| 东京一区二区| 久久久久99精品成人片三人毛片| 亚洲成人精品电影在线观看| 久久精品人人做人人爽电影蜜月| 国产精品―色哟哟| 91中文字幕精品永久在线| 中文字幕日本在线观看| 伊人成人在线观看| 丁香网亚洲国际| 青青青爽在线视频免费观看| 亚洲丝袜另类动漫二区| 丝袜美腿亚洲色图| 久久久精品人妻一区二区三区| 欧美久久一区二区三区| 亚洲国产专区| 欧美性猛交ⅹxxx乱大交免费| 特级全黄一级毛片| 麻豆一区二区三区视频| 日本一本a高清免费不卡| 精品国产91久久久| 国产在线拍揄自揄拍视频| 97在线视频免费观看完整版| 国产精品精品久久久久久| 日韩欧美国产一区二区| 国产亚洲一区二区三区在线播放| 国产97在线视频| 日韩精品免费看| 欧美日韩破处视频| 曰本女人与公拘交酡| 国产在线精品一区二区不卡了| 国产麻豆剧传媒精品国产| 菁菁伊人国产精品| www天堂网| 女同性恋一区二区三区| 精品福利在线| 丰满少妇在线观看bd| 免费人成网站在线观看欧美高清| 精品久久久久一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 国产精品变态另类虐交| 色悠悠久久综合网| 色猫咪免费人成网站在线观看| 久久久久久久久影视| 精品盗摄一区二区三区| 手机在线中文字幕| 午夜精品一区二区三区在线视| 91蜜桃传媒精品久久久一区二区| 深夜视频在线观看| www日韩视频| 国产精品一区在线观看乱码| 羞羞影院欧美| 色呦呦在线资源| 桃子视频成人app| 国产电影一区| 鲁丝一区二区三区| 国内在线视频| 尤物在线观看视频| 国产精品露脸自拍| 草色在线视频| 国产成人激情小视频| 狠狠狠色丁香婷婷综合久久五月| 精品国产综合区久久久久久| 久久久久久久午夜| 国产一区二区黄| 欧美日本免费一区二区三区| 91在线视频播放地址| 国产高清大尺度一区二区不卡| 精品国产网站在线观看| 一级特黄aaaaaa大片| 日本二区视频| 国产特级黄色片| 国产精品yjizz视频网一二区| 国产精品三级美女白浆呻吟| 奇米亚洲午夜久久精品| 日韩欧美在线播放视频| 欧美另类黑人巨大videos| 国产裸体无遮挡| 91久久精品国产91久久| 一级片久久久久| 欧美一激情一区二区三区| 欧美1级日本1级| 亚洲一区二区三区四区中文| 久久精品亚洲牛牛影视| 亚洲国产成人va在线观看天堂|