c 語(yǔ)言-指針(入門(mén)篇1)

前言:以上的入門(mén)篇知識(shí)均來(lái)自譚浩強(qiáng)c語(yǔ)言書(shū)籍勒魔,清華大學(xué)出版社。其中例子均屬本人胡鄒菇曲。與原書(shū)作者毫無(wú)關(guān)系冠绢。

入門(mén)的指針學(xué)習(xí),將從七個(gè)方面進(jìn)行介紹常潮,這是指針最基本的用法弟胀,需要掌握。

一喊式、地址和指針的概念

1.地址:內(nèi)存區(qū)的每一個(gè)字節(jié)有一個(gè)編號(hào)孵户,這就是地址。來(lái)自百度百科:由于我們現(xiàn)在使用的是80x86這種微處理器岔留,所以我們可以把地址分為三類:第一類:邏輯地址:機(jī)器語(yǔ)言指令仍用這種地址指定一個(gè)操作數(shù)的地址或一條指令的地址夏哭。這種尋址方式在Intel的分段結(jié)構(gòu)中表現(xiàn)得尤為具體,它使得MS-DOS或Windows程序員把程序分為若干段献联。每個(gè)邏輯地址都由一個(gè)段和偏移量組成竖配。

第二類線性地址:線性地址是一個(gè)32位的無(wú)符號(hào)整數(shù),可以表達(dá)高達(dá)2^32(4GB)的地址里逆。通常用16進(jìn)制表示線性地址进胯,其取值范圍為0x00000000~0xffffffff。

第三類物理地址:也就是內(nèi)存單元的實(shí)際地址运悲,用于芯片級(jí)內(nèi)存單元尋址龄减。物理地址也由32位無(wú)符號(hào)整數(shù)表示。

2.指針:將地址形象化的稱為“指針”班眯。意思就是通過(guò)她能找到以他為地址的內(nèi)存單元希停。在信息科學(xué)中,指針一般指向一個(gè)函數(shù)或一個(gè)變量署隘。在使用一個(gè)指針時(shí)宠能,一個(gè)程序既可以直接使用這個(gè)指針?biāo)鎯?chǔ)的內(nèi)存地址,又可以使用這個(gè)地址里存儲(chǔ)的函數(shù)值磁餐。

指針和指針變量是不同的兩個(gè)概念:指針是一個(gè)地址违崇,而指針變量是存放地址的變量阿弃。

例外還有一個(gè)概念:直接訪問(wèn):就是按照變量地址存取變量值的方式,間接訪問(wèn):將變量i的地址存放到臨沂個(gè)變量中羞延。舉個(gè)例子:你跟小三約好去開(kāi)房渣淳,有兩種方式見(jiàn)到她,第一種就是小三饑渴的不行伴箩,直接和你約見(jiàn)面的地點(diǎn)入愧,打開(kāi)門(mén)就看見(jiàn)她。這叫直接訪問(wèn)嗤谚,另外一種就是棺蛛,小三說(shuō),想跟你玩?zhèn)€游戲巩步,當(dāng)你打開(kāi)見(jiàn)面的房門(mén)里邊有個(gè)紙條旁赊,上邊寫(xiě)著,今天來(lái)點(diǎn)刺激的椅野,寫(xiě)下了一個(gè)地址终畅,xx樂(lè)園魔天倫28號(hào)。于是你就是哪里找她了鳄橘。這就叫間接訪問(wèn)声离。

二變量的指針和指向變量的指針變量

變量的指針就是變量的地址,存放變量地址的變量是指針變量瘫怜,他用來(lái)指向另外一個(gè)變量术徊。在信息工程中,“*”符號(hào)表示“指向”的對(duì)象鲸湃。如果定義i_pointer所指向的變量赠涮。

1定義一個(gè)指針變量

c規(guī)定,在所有的變量使用前暗挑,必須要定義變量笋除,指定其類型,這樣方便分配內(nèi)存單元炸裆。但是指針跟其他變量不一樣垃它,他是用來(lái)專門(mén)存放地址的。

特別注意兩點(diǎn):第一烹看,‘*’代表的是指針類型国拇。第二,指針變量必須有類型惯殊,因?yàn)椴煌闹羔樧兞款愋徒戳撸诓僮鲿r(shí)會(huì)受到影響。

2指針變量的引用

指針變量中只能存放地址(指針)土思,不要將一個(gè)整數(shù)(或者任何其他非地址類型的數(shù)據(jù))復(fù)制給一個(gè)指針變量务热。

*i_pointer_1=100忆嗜;(不合法);

兩個(gè)運(yùn)算符需牢記:

(1)&:取地址運(yùn)算符崎岂。

(2)*:指針運(yùn)算符(或稱“間接訪問(wèn)”運(yùn)算符)捆毫,

取指針?biāo)赶虻膶?duì)象的內(nèi)容。

E.p:&a為變量a的地址该镣,*p為指針變量p所只想的存儲(chǔ)單元的內(nèi)容(即p所指向的變量的值)

如:通過(guò)指針變量訪問(wèn)整形變量冻璃。

include

void main()

{ int a,b;

int *pointer_1,*pointer_2;

pointer_1=&a;

pointer_2=&b;

a=100;b=10;

printf(“%d,%d\n”,a,b);

printf(“%d,%d\n”,*pointer_1,*pointer_2);

}

特別注意:(括號(hào)的重要性)(*pointer_1)++相當(dāng)于a++响谓。注意括號(hào)的必要性损合,如果沒(méi)有括號(hào),就成為了*pointer_1++,++與*是同一級(jí)別運(yùn)算符娘纷,因此結(jié)合方向自右向左嫁审,它相當(dāng)于*(pointer_1++)。由于++在pointer_1的右側(cè)赖晶,是后加律适,因此先對(duì)pointer_1的原值進(jìn)行*運(yùn)算,得到的a值遏插,然后使pointer_1的值改變捂贿,這樣pointer_1不再指向a了。

3指針變量作為函數(shù)參數(shù)

函數(shù)的參數(shù)不一定是整型胳嘲,浮點(diǎn)型厂僧,字符型等數(shù)據(jù),也可以是指針類型了牛,他的作用是將一個(gè)變量的地址傳送到另一個(gè)函數(shù)中颜屠。

E.m:比較兩個(gè)整數(shù),順序輸出整數(shù)鹰祸。

#include

void main()

{ void swap(int *p1,int *p2); //聲明一個(gè)函數(shù)甫窟,在后邊需要使用。

int a,b;

int * pointer_1,* pointer_2;

scanf(“%d,%d”,&a,&b);

pointer_1=&a; pointer_2=&b;

if(a

printf(“%d,%d\n”,a,b);

}

void swap(int *p1,int *p2)//前邊聲明的函數(shù)

{ int temp;//定義為int temp蛙婴,而不是int*temp粗井,因?yàn)榻粨Q的是值。

temp=*p1;

p1=p2;

*p2=temp;

}

三街图、數(shù)組與指針

數(shù)組在內(nèi)存中占用存儲(chǔ)單元浇衬,并且有相應(yīng)的存儲(chǔ)地址。指針可以指向int台夺,char径玖,等變量類型,也可以指向數(shù)組颤介。所謂的數(shù)組元素的指針就是數(shù)組元素的地址梳星。

1數(shù)組元素的指針

它的賦值方式int*p=&a[0]//把數(shù)組a0的地址賦值給p赞赖;

它也等價(jià)于:int*p;p=&a[0]冤灾;

2通過(guò)指針引用數(shù)組變量

E.m:輸出數(shù)組中的全部元素前域。下面介紹三種方法:

(1)下標(biāo)法

#include

void main()

{ int a[10];//數(shù)組中一共有十個(gè)元素,所以數(shù)組下標(biāo)一定要注意韵吨。

int i;

for(i=0;i<10;i++)

scanf(“%d\n”,&a[i]);

for(i=0;i<10;i++)

printf(“%d\n”,a[i]);

}

(2)通過(guò)數(shù)組名計(jì)算數(shù)組元素地址匿垄,找出元素的值

#include

void main()

{ int a[10];//數(shù)組中一共有十個(gè)元素,所以數(shù)組下標(biāo)一定要注意归粉。

int i;

for(i=0;i<10;i++)

scanf(“%d\n”,&a[i]);

for(i=0;i<10;i++)

printf(“%d\n”,*(a+i));//利用數(shù)組的名稱計(jì)算地址椿疗。不能寫(xiě)成*a+i,意義完全不同糠悼。

}

(3)用指針變量指向數(shù)據(jù)元素

#include

void main()

{ int a[10];

int i,*p;

for(i=0;i<10;i++)

scanf(“%d\n”,&a[i]);

for(p=a;p

printf(“%d”,*p);

}

比較:(1)届榄,(2)兩種方法的時(shí)間復(fù)雜度相等,(3)比其他兩種方法快倔喂。原因在于:用指針變量直接指向元素铝条,不必每次都重新計(jì)算地址。

四席噩、字符串與指針

1字符串的表示形式

c語(yǔ)言中班缰,有兩種方式可以訪問(wèn)一個(gè)字符串,第一是:用字符數(shù)組存放一個(gè)字符串悼枢,然后輸出埠忘。第二是,用字符指針指向一個(gè)字符串萧芙。

以上基礎(chǔ)入門(mén)篇的一部分學(xué)習(xí)给梅,還有許多知識(shí)點(diǎn)需要進(jìn)一步學(xué)習(xí)。

開(kāi)始寫(xiě)Log的原因是因?yàn)橄胍トA為工作双揪,現(xiàn)在進(jìn)行知識(shí)點(diǎn)的惡補(bǔ)动羽,因?yàn)楹镁脹](méi)有使用c了∮嫫冢看看自己在準(zhǔn)備的這個(gè)過(guò)程中能學(xué)到多少東西运吓,進(jìn)行總結(jié),可以進(jìn)行客觀的學(xué)習(xí)效率評(píng)價(jià)疯趟。

2016/8/20

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拘哨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子信峻,更是在濱河造成了極大的恐慌倦青,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盹舞,死亡現(xiàn)場(chǎng)離奇詭異产镐,居然都是意外死亡隘庄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)癣亚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丑掺,“玉大人,你說(shuō)我怎么就攤上這事述雾〗种荩” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵玻孟,是天一觀的道長(zhǎng)唆缴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)取募,這世上最難降的妖魔是什么琐谤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮玩敏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘质礼。我一直安慰自己旺聚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布眶蕉。 她就那樣靜靜地躺著砰粹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪造挽。 梳的紋絲不亂的頭發(fā)上碱璃,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音饭入,去河邊找鬼嵌器。 笑死,一個(gè)胖子當(dāng)著我的面吹牛谐丢,可吹牛的內(nèi)容都是我干的爽航。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼乾忱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼讥珍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起窄瘟,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤衷佃,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蹄葱,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氏义,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衰腌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了觅赊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片右蕊。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吮螺,靈堂內(nèi)的尸體忽然破棺而出饶囚,到底是詐尸還是另有隱情,我是刑警寧澤鸠补,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布萝风,位于F島的核電站,受9級(jí)特大地震影響紫岩,放射性物質(zhì)發(fā)生泄漏规惰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一泉蝌、第九天 我趴在偏房一處隱蔽的房頂上張望歇万。 院中可真熱鬧,春花似錦勋陪、人聲如沸贪磺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寒锚。三九已至,卻和暖如春违孝,著一層夾襖步出監(jiān)牢的瞬間刹前,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工雌桑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喇喉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓筹燕,卻偏偏與公主長(zhǎng)得像轧飞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撒踪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類型过咬。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)制妄; ...
    朱森閱讀 3,440評(píng)論 3 44
  • 前言:指針是 C語(yǔ)言一個(gè)重要概念掸绞,也是C 語(yǔ)言的一個(gè)重要特色。使程序簡(jiǎn)潔、緊湊衔掸、高效烫幕。指針乃是C之精華。 數(shù)據(jù)在內(nèi)...
    瀟湘候晨雪閱讀 763評(píng)論 0 0
  • 1.語(yǔ)言中變量的實(shí)質(zhì) 要理解C指針敞映,我認(rèn)為一定要理解C中“變量”的存儲(chǔ)實(shí)質(zhì)较曼, 所以我就從“變量”這個(gè)東西開(kāi)始講起吧...
    金巴多閱讀 1,772評(píng)論 0 9
  • 計(jì)算機(jī)二級(jí)C語(yǔ)言上機(jī)題庫(kù)(南開(kāi)版) 1.m個(gè)人的成績(jī)存放在score數(shù)組中,請(qǐng)編寫(xiě)函數(shù)fun,它的功能是:將低于平...
    MrSunbeam閱讀 6,354評(píng)論 1 42
  • 文/李健 圖/小魚(yú) 媳婦第一次跟我回老家前振愿,跟我提了一個(gè)非常嚴(yán)肅的問(wèn)題:廁所怎么上捷犹? 我之前壓根就沒(méi)有考...
    煙村拾記閱讀 308評(píng)論 2 1