初探指針

指針
指針就是地址裹赴,指針也是C語言的一種數(shù)據(jù)類型羡忘,用指針類型定義的變量稱為指針變量。指針變量與普通變量一樣占有一定的存儲(chǔ)空間中存放的不是普通數(shù)據(jù)案狠,而是一個(gè)地址服傍,一個(gè)變量的地址被稱為該變量的指針。
指針變量的定義
指針變量同其他類型變量一樣骂铁,也要先定義后使用吹零。指針變量定義的一般形式為:
類型標(biāo)識(shí)符 變量名;
(1) 變量名前的“
“號(hào)是指針類型的標(biāo)志拉庵。定義時(shí)灿椅,在每個(gè)指針變量前都應(yīng)有“*”號(hào),以表示該變量為指針變量钞支。
(2) 類型標(biāo)識(shí)符是指針變量所指向的數(shù)據(jù)類型茫蛹。指針變量的值僅指出指向?qū)ο蟠鎯?chǔ)空間的首地址,而該存儲(chǔ)空間的大小烁挟,即存儲(chǔ)什么類型的數(shù)據(jù)婴洼,則由指針變量的類型標(biāo)識(shí)符決定。根據(jù)指針變量指向存儲(chǔ)空間中存放的不同數(shù)據(jù)類型信夫,將指針變量為整型指針變量窃蹋,字符型指針變量等卡啰。
例: char *point_c
Int *point_i
其中point_c是指向字符型數(shù)據(jù)的指針變量,而point_i是指向整型數(shù)據(jù)的指針變量警没,因此匈辱,指針變量point_c指向一個(gè)字節(jié)的存儲(chǔ)空間,而指針變量point_i指向兩個(gè)字節(jié)的存儲(chǔ)空間杀迹。

指針變量的使用
C語言指針變量的使用需要以下兩個(gè)運(yùn)算符
(1) &:取地址運(yùn)算符亡脸,它返回運(yùn)算對(duì)象的內(nèi)存地址。
(2) :指針運(yùn)算符树酪,也稱為“間接引用操作符“浅碾,它返回指針?biāo)赶蜃兞康闹担c&互補(bǔ)续语。
在程序中使用指針處理數(shù)據(jù)時(shí)垂谢,需要特別注意:指針變量在使用前必須被賦值確定的地址值,既可以用變量的地址對(duì)指針變量賦值疮茄,如“p1=&a;“,也可以用已經(jīng)賦值的同類型指針變量對(duì)指針變量賦值滥朱,如”p=p1;“。一個(gè)沒有賦初始值的指針變量是不確定的力试,可能指向內(nèi)存中任何一個(gè)地方徙邻,如果使用該指針將產(chǎn)生不可預(yù)見的錯(cuò)誤。
指針的算術(shù)運(yùn)算
指針?biāo)阈g(shù)運(yùn)算是以指針變量存儲(chǔ)的地址值作為對(duì)象進(jìn)行的運(yùn)算畸裳,它與普通變量的運(yùn)算在種類和意義上是不同的缰犁。由于指針是地址,指針?biāo)阈g(shù)運(yùn)算只能進(jìn)行加減怖糊。
指針?biāo)阈g(shù)運(yùn)算與指針類型有密切關(guān)系帅容。指針變量進(jìn)行加減時(shí),其值(地址值)變動(dòng)的單位不是字節(jié)蓬抄,而是指針變量指向的數(shù)據(jù)類型占用的內(nèi)存單元數(shù)
Char p=1000
P+1 →1001
P+2→1002
Int p=2000
P+1=2002
P+2=2004
指針與數(shù)組
可以將一維數(shù)組的首地址或其元素的地址賦值給相同數(shù)據(jù)類型的指針變量 使該指針變量指向一維數(shù)組或其元素丰嘉,進(jìn)而利用該指針變量處理一維數(shù)組或其元素。
例如:
int a[10]
Int p;
P=&a[0];
將一維數(shù)組元素a[0]的地址賦給指針變量p嚷缭,從而使p指向數(shù)組元素a[0]
(1) p+i就是數(shù)組元素a[i]的地址饮亏。這時(shí)由于指向數(shù)組的第一個(gè)元素,即a[0],根據(jù)指針運(yùn)算規(guī)則阅爽,p+1即為a[1]的地址路幸,p+i所指向的數(shù)組元素,即a[i].
(2) 指向數(shù)組的指針變量也可以帶下標(biāo)付翁,即p[i]與
(p+i)等價(jià)
綜上所述简肴,引用一維數(shù)組的元素,可以用以下兩種方法百侧。
(1) 下標(biāo)法砰识。如a[i],p[i];
(2) 指針法能扒,如
(a+i),
(p+i)
指針與函數(shù)
指針作函數(shù)的參數(shù)
函數(shù)的參數(shù)不僅可以是整型辫狼,實(shí)型初斑,字符型等基本類型的數(shù)據(jù),還可以是指針類型數(shù)據(jù)膨处。指針作參數(shù)的作用是將一個(gè)變量的地址傳送到另一個(gè)函數(shù)中见秤,這樣,形參指針就指向主調(diào)函數(shù)中的變量真椿,從而可以改變主調(diào)函數(shù)中變量的值鹃答。
由上例可見,使用指針作函數(shù)參數(shù)時(shí)突硝,通過形參指針可以改變主調(diào)函數(shù)中變量的值测摔,在函數(shù)調(diào)用結(jié)束后,這些被改變的變量值被保留下來解恰,因此避咆,可以用指針作函數(shù)參數(shù)的方式,從函數(shù)中得到多個(gè)返回值修噪。
返回指針的函數(shù)
函數(shù)調(diào)用結(jié)束后,可以返回一個(gè)值給主調(diào)函數(shù)路媚,這個(gè)值可以是整型黄琼,實(shí)型,字符型等基本類型數(shù)據(jù)整慎,也可以是指針脏款,即地址。
返回指針值函數(shù)的一般定義形式為
類型標(biāo)識(shí)符 函數(shù)名(形參表)
例如
Int f(int a,int b)
{……}
其中裤园,函數(shù)名f前面的
表示此函數(shù)是指針型函數(shù)撤师,即該函數(shù)的返回值是指針。
前面的int表示返回指針是指向整型數(shù)據(jù)的指針拧揽。
例 編寫str_chr函數(shù)剃盾,其功能是在一個(gè)字符串中查找一個(gè)指定字符,找到后返回該字符的地址淤袜,若未找到則返回空指針痒谴。在main函數(shù)中調(diào)用str_chr函數(shù),查找字符‘e’在字符串“how are you!“中的地址以及相對(duì)位置并輸出铡羡。
指向函數(shù)的指針
C語言的指針變量不僅可以指向變量积蔚,字符串和數(shù)組,也可以指向函數(shù)烦周。程序執(zhí)行時(shí)尽爆,函數(shù)代碼被存放在用戶程序區(qū)怎顾。編譯系統(tǒng)在編譯源程序時(shí)為每個(gè)函數(shù)分配一個(gè)入口地址,這個(gè)入口地址被稱為函數(shù)的指針漱贱。因此槐雾,可以將函數(shù)的指針賦給一個(gè)指向函數(shù)的指針變量,然后通過該指針變量調(diào)用其指向的函數(shù)
說明:
(1) 指向函數(shù)的指針變量定義的一般形式為:
類型標(biāo)識(shí)符 (
指針變量名)( )饱亿;
(2) 可以用函數(shù)名調(diào)用函數(shù)蚜退,也可以用指向函數(shù)的指針變量調(diào)用函數(shù),兩種方法作用相同彪笼。
(3) 指向函數(shù)的指向變量專門用來存放函數(shù)的入口地址钻注,它并不固定指向某個(gè)函數(shù),把哪個(gè)函數(shù)的地址付給它配猫,它就指向哪個(gè)函數(shù)幅恋,一個(gè)指向函數(shù)的指針變量可以指向不同的函數(shù)。
(4) 對(duì)指向函數(shù)的指針變量賦值泵肄,只需給出函數(shù)名捆交,不涉及實(shí)參與形參的結(jié)合問題。例如:f=add
(5) 用指向函數(shù)的指針變量調(diào)用函數(shù)時(shí)腐巢,只需用(f)代替函數(shù)名即可品追,在(f)之后的括號(hào)中根據(jù)要求寫上實(shí)參,例如:z=(*f)(x冯丙,y)肉瓦;
(6) 對(duì)指向函數(shù)的指針變量進(jìn)行加減運(yùn)算沒有意義,不能通過f++指向下一條指令或者下一個(gè)函數(shù)胃惜,如f++泞莉,f--,f+n等運(yùn)算都無意義船殉。

include<stdio.h>

int main()
{
int a,b;
int p_a,p_b;
a = 100;
b = 200;
p_a = &a;
p_b = &b;
printf("\n&a=%xh,&b=%xh\n",&a,&b);
printf("p_a=%xh,p_b=%xh\n",p_a,p_b);
printf("&p_a=%xh,&p_b=%xh\n",&p_a,&p_b);
printf("a=%d,b=%d\n",a,b);
printf("p_a=%d,p_b=%d\n",p_a,p_b);
return 0;
}

include<stdio.h>

void swap(int p1,int p2)
{
int temp;
temp = p1;
p1 = p2;
p2 = temp;

}
int main()
{
int a = 0,b = 0;
int point_a,point_b;
point_a = &a;
point_b = &b;
printf("請(qǐng)輸入a和b:\n");
scanf("%d%d",&a,&b);
if(a > b)
swap(a,b);
printf("%d %d\n",a,b);
return 0;

}

include<stdio.h>

char str_chr(char str,char ch)
{
while((
str!=ch)&&(
str!=NULL))
str ++;
if(*str==NULL) return (0); //未找到鲫趁,返回空指針
return(str);
}
int main()
{
char *p,ch,str[]="How are you!";
ch = 'e';
p = str_chr(str,ch);
if(p)
{
printf("string starts at %xh.\n",str);
printf("char'%c'at%xh.\n",ch,p);
printf("position %d.\n",p-str);
}
else
printf("not found!\n");
return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市利虫,隨后出現(xiàn)的幾起案子挨厚,更是在濱河造成了極大的恐慌,老刑警劉巖糠惫,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幽崩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡寞钥,警方通過查閱死者的電腦和手機(jī)慌申,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蹄溉,你說我怎么就攤上這事咨油。” “怎么了柒爵?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵役电,是天一觀的道長。 經(jīng)常有香客問我棉胀,道長法瑟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任唁奢,我火速辦了婚禮霎挟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麻掸。我一直安慰自己酥夭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布脊奋。 她就那樣靜靜地躺著熬北,像睡著了一般。 火紅的嫁衣襯著肌膚如雪诚隙。 梳的紋絲不亂的頭發(fā)上讶隐,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音久又,去河邊找鬼整份。 笑死,一個(gè)胖子當(dāng)著我的面吹牛籽孙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播火俄,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼犯建,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了瓜客?” 一聲冷哼從身側(cè)響起适瓦,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谱仪,沒想到半個(gè)月后玻熙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疯攒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年嗦随,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枚尼,死狀恐怖贴浙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情署恍,我是刑警寧澤崎溃,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盯质,受9級(jí)特大地震影響袁串,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呼巷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一囱修、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朵逝,春花似錦蔚袍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渠脉,卻和暖如春宇整,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芋膘。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工鳞青, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人为朋。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓臂拓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親习寸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胶惰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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