趙俊峰
(太原大學(xué)外語師范學(xué)院,山西 太原 030012)
指針是C語言中的一個非常重要的概念,也是C語言的精華之所在.只有掌握了指針,才能說掌握了C語言.靈活而正確地運用好指針,可以非常方便地表示復(fù)雜的數(shù)據(jù)類型,提高C語言的編程效率.指針即是地址,一個數(shù)據(jù)對象的指針即是這種數(shù)據(jù)對象的地址.要真正掌握指針,必須理解指針與變量、指針與數(shù)組、指針與字符串、指針與函數(shù)、指針與結(jié)構(gòu)體之間的關(guān)系.
變量的指針即是變量的地址,若有定義:int a;則變量a的地址可以用&a獲得(&為取地址運算符).
指針變量即在其中存放地址的變量.指針變量與普通變量不同,普通變量中存放的是值(可以是整數(shù)、實數(shù)或字符等),而指針變量中存放的是另一個數(shù)據(jù)對象的地址,即這個指針變量就直接指向了另一個數(shù)據(jù)對象.要使用指針變量必須經(jīng)過定義、關(guān)聯(lián)和引用三個階段.
(1)定義:int a,*p;&&a為普通變量,p為指針變量.
(2)關(guān)聯(lián):p=&a;&&由于在p中存放了a的地址,指針變量p則指向a.
(3)引用:printf(“%d”,*p);&& 通過*p間接引用 p所指向的變量a.
上述的指針變量p直接指向普通變量,這種變量即為一級指針.若某個指針變量間接指向普通變量,這種指針變量則為二級指針[1].如有定義:int a,*p,**q;則 p 為一級指針,q為二級指針.若有關(guān)聯(lián):p=&a;q=&p;則q通過p間接地指向了變量a.這時,引用a的方法就有了a、*p、**q這三種形式.
一維數(shù)組的指針即是一維數(shù)組的首地址,若有定義:int a[10];則數(shù)組名a代表的即是數(shù)組的首地址.
若在一個指針變量中存放了某個一維數(shù)組的首地址,則這個指針變量就指向了這個數(shù)組中的第1個元素[2].要使用這種指針變量也必須經(jīng)過定義、關(guān)聯(lián)和引用三個階段.
(1)定義:int a[10],*p;&& a為一維數(shù)組,p為指針變量.
(2)關(guān)聯(lián):p=a;或p=&a[0];&& 在p中存放了數(shù)組a的首地址,p則指向數(shù)組a的第1個元素.
(3)引用:*p、p++、*p++等等 && 通過p++可以讓p指向下一個元素.
指向一維數(shù)組的指針變量不僅可以指向第一個元素,還可以在指向數(shù)組中的其他元素.如有定義:int a[10],*p=a+5;則p指針指向數(shù)組中下標為5的a[5]元素.
二維數(shù)組可以看作是特殊的一維數(shù)組.若有定義:int a[3][4];可以把第 1 行的元素 a[0][0]、a[0][1]、a[0][2]、a[0][3]看作是數(shù)組名為 a[0]的一維數(shù)組,依次類推,第2行可以看作是數(shù)組名為a[1]的一維數(shù)組,第3行可以看作是數(shù)組名為 a[2]的一維數(shù)組.而 a[0]、a[1]、a[2]又可以看作是數(shù)組名為a的一維數(shù)組,因此二維數(shù)組即是一維數(shù)組的一維數(shù)組.如下圖所示,不難看出二維數(shù)組名其實是二級指針,間接地指向二維數(shù)組a的元素[3].

若在一個指針變量中存放了某個二維數(shù)組的第1個元素的地址,則這個指針變量就指向了這個數(shù)組中的第1個元素.要使用這種指針變量也必須經(jīng)過定義、關(guān)聯(lián)和引用三個階段.
(1)定義:int a[3][4],*p;&& a為二維數(shù)組,p為指針變量.
(2)關(guān)聯(lián):p=&a[0][0];或 p=a[0];&& 因為 a[0]可以看作是第1行數(shù)組的數(shù)組名,因此a[0]和&a[0][0]是等價的.
(3)引用:*p、p++、*p++等等 && 通過p++可以讓p指向下一個元素.
上述指針p直接指向二維數(shù)組的某一個元素,因此指針p為一級指針.p++的作用是讓p指針指向下一個元素,而不是指向下一行元素.不難發(fā)現(xiàn)取地址運算符&和下標運算符[]是可逆的,可以相互抵消.
在上圖中,我們可以發(fā)現(xiàn)二維數(shù)組名a指向的并不是某一個元素,它指向的是某行元素,即它指向了一行的一維數(shù)組.要使用這種指針變量也必須經(jīng)過定義、關(guān)聯(lián)和引用三個階段.
(1)定義:int a[3][4],(*p)[4];&& a為二維數(shù)組,p為指向一維數(shù)組的指針變量.
(2)關(guān)聯(lián):p=&a[0];或p=a;&& 因為數(shù)組元素a[0]、a[1]、a[2]的數(shù)組名為 a,因此 a和 &a[0]是等價的.
(3)引用:p[i][j]、*(*(p+i)+j)&& 下標運算符[]和指針運算符*是等價的.
上述指針p直接指向二維數(shù)組的某一行,間接指向二維數(shù)組的某個元素,因此指針p為二級指針.p++的作用不是讓p指針指向下一個元素,而是指向下一行元素[4].
數(shù)組指針即指向數(shù)組的指針,而指針數(shù)組則是元素為地址的數(shù)組.指針數(shù)組的定義如下:int*p[3];則p為長度為3的一維數(shù)組,其每個元素中都存放著地址.不難發(fā)現(xiàn):無論是指向數(shù)組的指針變量,還是存放指針的數(shù)組名,都是二級指針.
字符串的指針是字符串的首地址,即字符串中第一個字符的地址.串常量代表的即是串的首地址.如串常量“abcdefg”代表的是串中第1個字符‘a(chǎn)’的地址.
若在一個指針變量中存放了某個字符串的首地址,則這個指針變量就指向了這個串中的第1個元素.若有定義:int*p=“abcdefg”;則指針p指向了字符a.可以通過p++或p--可以讓p指向串中的下一個或上一個字符.
利用指針對字符串進行操作,要比用字符數(shù)組更簡單和方便.因為數(shù)組名是地址常量,不能通過++或--指向其他字符.而指針p是地址變量,引用起來更靈活.如:語句while(*p++=*q++);的作用是將q所指字符串拷貝到p中.語句組while(*p++==*q++);return*p-*q;的作用是比較字符串是否相等.語句組while(*p)p++;while(*p++==*q++);的作用是將q所指字符串連接到p所指字符串之后.語句while(*p){if(*p>=’a’&& *p< =’z’)*p=*p-32;p++;}的作用是將p所指字符串中所有的小寫字母改為大寫字母.語句組n=0;while(*p)n++;的作用是求p所指字符串的長度(不包括‘ 主站蜘蛛池模板: 91精品伊人久久大香线蕉| 免费看黄片一区二区三区| 一级香蕉视频在线观看| 2024av在线无码中文最新| 91小视频在线| 欧美成人综合在线| 国产精品9| 日韩在线视频网| 午夜啪啪网| 久久精品中文无码资源站| 亚洲av无码久久无遮挡| 亚洲最猛黑人xxxx黑人猛交 | 国产91在线|日本| 国产麻豆福利av在线播放| 久久无码av一区二区三区| 日韩一级毛一欧美一国产 | 久久99精品国产麻豆宅宅| 亚洲乱码在线播放| 在线观看免费国产| 国产美女丝袜高潮| 国产熟女一级毛片| 亚洲人妖在线| av在线手机播放| 国产午夜在线观看视频| 欧美色视频日本| 精品一区二区三区自慰喷水| 亚洲欧美日本国产综合在线| 欧美a级完整在线观看| 国产精品无码久久久久AV| 日韩区欧美国产区在线观看| 亚洲国产精品久久久久秋霞影院| 精品夜恋影院亚洲欧洲| 激情午夜婷婷| 波多野结衣一区二区三区四区| 九九九精品视频| 欧美啪啪一区| 亚洲天堂啪啪| 亚洲精品自产拍在线观看APP| 国产在线第二页| 亚洲欧洲日本在线| 99国产精品国产高清一区二区| 亚洲黄色片免费看| 激情無極限的亚洲一区免费| 欧美亚洲欧美| 国产欧美视频在线观看| 男人天堂伊人网| 国产尤物视频网址导航| 一级毛片a女人刺激视频免费| 免费中文字幕一级毛片| 欧美日韩久久综合| 日韩美一区二区| 成年片色大黄全免费网站久久| 亚洲第一页在线观看| 欧美在线网| 午夜福利无码一区二区| 青青草原偷拍视频| 亚洲午夜国产片在线观看| 国产精品永久在线| 国产一级在线播放| 91亚洲国产视频| 亚洲AV一二三区无码AV蜜桃| 久久中文电影| 动漫精品啪啪一区二区三区| 亚洲熟女偷拍| 色妞www精品视频一级下载| 日韩中文精品亚洲第三区| 呦视频在线一区二区三区| 在线精品自拍| 国产剧情一区二区| 亚洲一区二区黄色| 国产一在线| 国产成熟女人性满足视频| 成年人国产网站| 免费毛片在线| 日韩二区三区无| 国产精品久久久久久久久久98| 亚洲乱强伦| 国产一区二区丝袜高跟鞋| 国产手机在线ΑⅤ片无码观看| 91国内视频在线观看| 99久久婷婷国产综合精| 国产精品成|