国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

指針:C語(yǔ)言的重要概念和特色

2011-12-29 00:00:00令小懷
考試周刊 2011年44期


  摘 要: 指針是C語(yǔ)言的精髓部分,也是C語(yǔ)言的重要特色。本文從指針的基本概念出發(fā),結(jié)合具體實(shí)例對(duì)指針的類(lèi)型進(jìn)行了分析,并對(duì)指針在實(shí)際應(yīng)用中常出現(xiàn)的問(wèn)題進(jìn)行了歸類(lèi)總結(jié),希望對(duì)初學(xué)者理解“指針”這一重要概念有所幫助。
  關(guān)鍵詞: C語(yǔ)言程序設(shè)計(jì) 指針 數(shù)組 函數(shù)
  
  指針是C語(yǔ)言中的精髓,它在C語(yǔ)言中被廣泛地使用。指針是C語(yǔ)言的一個(gè)重要概念,也是C語(yǔ)言的一個(gè)重要特色。理解和運(yùn)用好指針可以靈活方便地處理程序中各種復(fù)雜問(wèn)題,可以輕松完成其他高級(jí)程序設(shè)計(jì)語(yǔ)言不便完成的任務(wù)。
  一、指針的概念
  一個(gè)指針變量的值就是某個(gè)內(nèi)存單元的地址或稱為某內(nèi)存單元的指針。
  指針的引入為系統(tǒng)存取數(shù)據(jù)提供“直接訪問(wèn)”和“間接訪問(wèn)”。有兩個(gè)上鎖且放著物品的盒子A、B,如果你有A盒子的鑰匙,則可以直接打開(kāi)A盒子將物品取出;如果你有B盒子的鑰匙,而A盒子的鑰匙在B盒子中,要想取出A盒子中的物品,則必須先打開(kāi)B盒子,取出A盒子的鑰匙,再打開(kāi)A盒子將物品取出。上面兩種情況就是直接訪問(wèn)和間接訪問(wèn)的概念。所謂間接訪問(wèn),是先訪問(wèn)存放變量地址的存儲(chǔ)單元,得到該變量的地址,再對(duì)變量?jī)?nèi)容進(jìn)行訪問(wèn)。通過(guò)指針變量實(shí)現(xiàn)對(duì)變量的訪問(wèn)方式,稱為間接訪問(wèn)。首先要定義一個(gè)指針變量,然后將一個(gè)同類(lèi)型變量的地址賦給該指針變量(這時(shí)我們稱指針變量指向該變量),這樣就可以進(jìn)行間接訪問(wèn)了。間接訪問(wèn)的過(guò)程是:由指針變量得到變量的地址,根據(jù)該地址找到變量的存儲(chǔ)區(qū),再對(duì)該存儲(chǔ)區(qū)的內(nèi)容進(jìn)行存取,從而實(shí)現(xiàn)了對(duì)變量的間接訪問(wèn)。
  指針變量是一種特殊變量。系統(tǒng)為指針變量分配一塊連續(xù)存儲(chǔ)單元不是供其存儲(chǔ)數(shù)據(jù),而是存儲(chǔ)內(nèi)存地址。因此,指針變量是存儲(chǔ)內(nèi)存地址的變量。在計(jì)算機(jī)中,把內(nèi)存區(qū)劃分為一個(gè)一個(gè)的存儲(chǔ)單元,每個(gè)單元為一個(gè)字節(jié)(8位),它們都有一個(gè)編號(hào),這個(gè)編號(hào)就是內(nèi)存地址。
  注意:1.程序中定義的每個(gè)數(shù)據(jù)在編譯后都占有各自的內(nèi)存區(qū)。
  2.數(shù)據(jù)所占有的存儲(chǔ)單元個(gè)數(shù)是由其類(lèi)型決定的。
  3.首地址:第1個(gè)單元的地址。
  4.表示地址的數(shù)與整數(shù)的區(qū)別。
  二、指針的類(lèi)型
  1.指向簡(jiǎn)單變量的指針。指針?biāo)傅臄?shù)據(jù)類(lèi)可以是簡(jiǎn)單的數(shù)據(jù)類(lèi)型。
  例:(1)intp,i;p=&i;意思是指針變量指向整型變量i
 ?。?)charp,a;p=&a;意思是指針變量指向字符型變量a
  (3)intp,a[10];p=a;意思是指針變量指向數(shù)組a
  2.指向數(shù)組的指針。指針?biāo)傅臄?shù)組既可以是一維數(shù)組,也可以是多維數(shù)組。
  例:main()
  {inta[4]={2,4,6,8};
  intp;
  for(p=a;p<a+4;p++)
  printf("%2d",p);}
  分析:指針p指向了a數(shù)組的首地址,通過(guò)p++來(lái)訪問(wèn)a數(shù)組的每一元素。
  3.指針數(shù)組。指針數(shù)組是一種特殊的數(shù)組,它每個(gè)元素的類(lèi)型都是指針類(lèi)型(即地址),其他與一般數(shù)組相同。當(dāng)把某個(gè)量的地址放入某元素中后,即可通過(guò)該元素對(duì)相應(yīng)的量進(jìn)行間接訪問(wèn)。數(shù)組元素是由指針變量組成的一種指針。定義如:intp[2];指針數(shù)組p包含兩個(gè)元素,每個(gè)元素指向一個(gè)整型數(shù)據(jù)。
  例:main()
  {intp[2],i,a[2][2]={1,3,5,7};
  for(i=0;i<2;i++)
  p=a;
  printf("%d\n",(p[1]+1));}
  分析:指針p是一個(gè)數(shù)組,通過(guò)for循環(huán)語(yǔ)句給指針數(shù)組中的每個(gè)指針變量賦值,p[1]的初值為數(shù)組a的第二行的首地址,(p[1]+1)便是元素a[1][1],因此程序輸出7。
  4.指向指針的指針。指針變量指向的是指針的地址,定義如:intp。
  例:main()
  {inta[2][2]={1,3,5,7};
  intp[2],q,i;
  for(i=0;i<2;i++)
  p=a;
  q=p;
  printf("%d\n",((q+1)+1));}
  分析:指針數(shù)組p的各個(gè)指針變量指向數(shù)組a的各行首地址,q指向指針數(shù)組p的首地址,(q+1)等同p[1],如此,((q+1)+1)便等同(p[1]+1)也就是a[1][1],因此程序輸出7。
  5.指向函數(shù)的指針。指針變量指向函數(shù)的首地址,然后通過(guò)該指針變量調(diào)用該函數(shù)。定義如:int(p)()。
  例:intmax(inta,intb)
  {return((a>b)?a:b);}
  main()
  {intmax(int,int);
  int(p)();inta,b;
  p=max;scanf("%d,%d",&a,&b);
  printf("max=%d\n",(p)(a,b));}
  分析:int(p)()表示定義了一個(gè)指向函數(shù)的指針變量,函數(shù)名max代表了函數(shù)的入口地址,執(zhí)行p=max后,p指向了函數(shù)max,(p)(a,b)便是通過(guò)p調(diào)用函數(shù)max。
  6.指向文件的指針。C語(yǔ)言對(duì)文件的操作并不是直接通過(guò)文件名進(jìn)行的,而是根據(jù)文件名生成一個(gè)文件指針,通過(guò)該指針來(lái)對(duì)文件進(jìn)行操作.定義如:FILEfP;(fp為文件指針,此時(shí)fp不指向任何文件)。
  7.指向字符串的指針。字符串是一種特殊的一維數(shù)組,所以上節(jié)中介紹的方法同樣適用于對(duì)字符串的訪問(wèn)。字符串的特殊性在于:字符串的末尾是結(jié)束標(biāo)志′\0′,所以訪問(wèn)字符串時(shí)常用結(jié)束標(biāo)志進(jìn)行判斷。
  三、指針應(yīng)用中常見(jiàn)的錯(cuò)誤
  1.把數(shù)據(jù)賦給指針變量。指針在使用前必須進(jìn)行初始化,賦予指針的值必須是地址。
  例:main()
  {inti=6,p;p=6;
  printf("p=%d\n”,p);}
  正確語(yǔ)句:p=&i;“&”是一個(gè)取變量地址的運(yùn)算符。
  2.指針常量運(yùn)算錯(cuò)誤。程序中常量指針是不能被修改的。典型有數(shù)組名指針常量和指向字符串常量的指針。
  例:main()
  {inta[5]={1,2,3,4,5},p;p=a;
  printf("%d\n”,(++a));}
  正確語(yǔ)句:printf“(%d\n”,(++p));
  3.指針賦值類(lèi)型不一致。
  例:main()
  {intp,a[3][3]={{1,2,3},{4,5,6},{7,8,9}};p=a;
  printf(“%d\n”,p);}
  正確語(yǔ)句:p=a[0];或p=&a[0][0];如果一定把a(bǔ)賦值給p,必須先將a轉(zhuǎn)換成整型指針類(lèi)型。如:p=(int)a;。特別是將多維數(shù)組賦值給指針變量時(shí)應(yīng)注意類(lèi)型匹配。
  注:“本文中所涉及到的圖表、公式、注解等請(qǐng)以PDF格式閱讀”

砚山县| 兴业县| 论坛| 乃东县| 双牌县| 池州市| 西乌珠穆沁旗| 柳林县| 宜良县| 白城市| 资阳市| 滨海县| 黄石市| 昌平区| 陆川县| 夏河县| 内黄县| 河池市| 宜城市| 鱼台县| 卫辉市| 滕州市| 贵溪市| 股票| 英山县| 周宁县| 常德市| 岱山县| 拉萨市| 闸北区| 申扎县| 会昌县| 汕头市| 永靖县| 靖安县| 铅山县| 谷城县| 汉川市| 湖口县| 北票市| 溧水县|