第一章 指針常識

和C語言中任何一個部分一樣,指針也有其基本的常識埋涧。本文不會介紹太多基礎(chǔ)的東西,關(guān)于指針的常識模塊也只是一帶而過奇瘦,如有遺忘棘催,請參考相關(guān)書籍。

1.1 變量

變量常常出現(xiàn)于表達式中耳标,當(dāng)變量出現(xiàn)在表達式的左方時醇坝,它表示的是某個地址;而當(dāng)變量出現(xiàn)在表達式的右方時次坡,它表示的是某個地址里存放的值纲仍。例如:

int a = 1; 
int b =2; a = b;

其中a = b;中的a表示的是a的地址空間,而b表示的是b的地址空間中的內(nèi)容贸毕。a = b則表示將a的地址空間的修改成b的地址空間中的內(nèi)容郑叠。簡而言之,對于變量來說明棍,出現(xiàn)在賦值表達式的左邊則表示引用其地址乡革,出現(xiàn)在賦值表達式的右邊則表示引用其值。整個表達式的意思就是,把某個地址里的內(nèi)容修改成后面的內(nèi)容沸版。判斷一個賦值表達式是否合法就看賦值的左邊是否是個地址嘁傀,而右邊又是否是個值。

1.2 指針初始化

定義一個指針只是向編譯器申請一個用于存放某個地址的地址空間视粮,而且這個地址空間里的值應(yīng)該是某個地址细办,同時,指針本身也是一個變量蕾殴。由于指針本身也是一個變量笑撞,那么它的默認初值、作用域钓觉、生存周期等都符合變量的特性茴肥。

指針在使用時一定要先初始化:

例如,int *p; 則編譯器會分配一個4字節(jié)的內(nèi)存用于存放p荡灾,但是此時p還未初始化瓤狐,它的值是不確定的。我們可以用&p取出此指針的地址批幌,用p表示該地址中的內(nèi)容础锐,但是,用*p引用該指針?biāo)赶虻淖兞康闹档慕Y(jié)果是不可預(yù)知的荧缘。如果運氣好皆警,會崩掉,如果運氣不好胜宇,就等著程序給你添麻煩吧耀怜。

一般來說指針的使用流程是:

int *p = NULL;   //定義并附初值0
int a = 0; p = &a;  //使用前賦值
cout<<*p<<endl;  //指針引用
p = NULL;       //不用時清空

1.3 NULL系列

在C語言中諸如NULL之類的用于幫助程序員理解程序的宏定義\說明有很多,現(xiàn)簡要說明一下桐愉。

NUL:ASCII字符集中的’\0’字符的名字财破,它的字節(jié)模式為全0。事實上从诲,根本就不存在預(yù)定義的符號NUL左痢,如果想要使用,則必須自己定義系洛。#define NUL 0 或 #define NUL '\0'
NULL:標(biāo)識空指針俊性。定義為0 即 #define NULL 0
false:標(biāo)識邏輯0。定義為0 即 #define false 0
true:標(biāo)識邏輯1描扯。定義為1 即#define false 1

1.4 指針常見錯誤

指針最常見的錯誤就是段錯誤了定页。程序在執(zhí)行時會分成許多段,對段的非法操作統(tǒng)稱為段錯誤绽诚。比如典徊,修改只讀段的內(nèi)容杭煎,比如訪問不屬于該程序的段。最為常見的例子就是訪問不屬于該程序的地址空間卒落。

一種好的編程風(fēng)格是在創(chuàng)建指針的時候賦初值NULL羡铲,因為一般而言任何操作系統(tǒng)都會把低位地址留給操作系統(tǒng),把高位地址留給應(yīng)用程序儡毕。當(dāng)應(yīng)用程序中引用地址0時會產(chǎn)生訪問不屬于該程序地址空間的操作也切,此時就會引發(fā)段錯誤。

對于某些要求對界的機器而言腰湾,當(dāng)某種類型的數(shù)據(jù)在內(nèi)存中的存儲地址處在錯誤的邊界上的時候雷恃,此時訪問這個地址會引發(fā)一個總線錯誤。

注:本文中各種特例都是在UNIX系統(tǒng)的gcc編譯器下調(diào)試的檐盟,本文所說的各種術(shù)語也都適用于UNIX系統(tǒng)褂萧,但是對于Windows未必適用押桃。

問題:段錯誤的精確定義是什么葵萎?段錯誤和可執(zhí)行程序的段到底有什么聯(lián)系?

1.5 指針常量

我們可以將一個常量強制轉(zhuǎn)換成指針唱凯,雖然這個操作并沒有太多的意義羡忘,但確實是可以的。例如:

int * a = (int*) 100; 
*(int*)100 = 100;

問題:用常量在程序中表示的地址是不是絕對地址磕昼?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卷雕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子票从,更是在濱河造成了極大的恐慌漫雕,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件峰鄙,死亡現(xiàn)場離奇詭異浸间,居然都是意外死亡,警方通過查閱死者的電腦和手機吟榴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門魁蒜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吩翻,你說我怎么就攤上這事兜看。” “怎么了狭瞎?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵细移,是天一觀的道長。 經(jīng)常有香客問我熊锭,道長弧轧,這世上最難降的妖魔是什么缔刹? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮劣针,結(jié)果婚禮上校镐,老公的妹妹穿的比我還像新娘。我一直安慰自己捺典,他們只是感情好鸟廓,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著襟己,像睡著了一般引谜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上擎浴,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天员咽,我揣著相機與錄音,去河邊找鬼贮预。 笑死贝室,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仿吞。 我是一名探鬼主播滑频,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼唤冈!你這毒婦竟也來了峡迷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤你虹,失蹤者是張志新(化名)和其女友劉穎绘搞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體傅物,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡夯辖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挟伙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楼雹。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尖阔,靈堂內(nèi)的尸體忽然破棺而出贮缅,到底是詐尸還是另有隱情,我是刑警寧澤介却,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布谴供,位于F島的核電站,受9級特大地震影響齿坷,放射性物質(zhì)發(fā)生泄漏桂肌。R本人自食惡果不足惜数焊,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崎场。 院中可真熱鬧佩耳,春花似錦、人聲如沸谭跨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽螃宙。三九已至蛮瞄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谆扎,已是汗流浹背挂捅。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留堂湖,地道東北人闲先。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像苗缩,于是被迫代替她去往敵國和親饵蒂。 傳聞我的和親對象是個殘疾皇子声诸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型姻政。 運用指針編程是C語言最主要的風(fēng)格之一舅柜。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,430評論 3 44
  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關(guān)于...
    SeanCST閱讀 7,784評論 0 27
  • C語言指針的總結(jié) 1. 變量 不同類型的變量在內(nèi)存中占據(jù)不同的字節(jié)空間盅弛。 內(nèi)存中存儲數(shù)據(jù)的最小基本單位是字節(jié),每一...
    xx_cc閱讀 3,714評論 11 39
  • void* 類型指針:通用變體類型指針;可以不經(jīng)轉(zhuǎn)換算色,賦給其他指針抬伺,函數(shù)指針除外;malloc返回的就是void*...
    冰吉凌閱讀 3,320評論 0 18
  • 我生活在農(nóng)村灾梦,一個家境不是很好的農(nóng)民家庭峡钓。 父親是個木匠妓笙,在農(nóng)活閑下來的冬天,會去周邊的四鄰八鄉(xiāng)的做點門窗家具之類...
    夏夜冬日閱讀 169評論 2 1