999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

指針:C語言的重要概念和特色

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


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

主站蜘蛛池模板: 亚洲一区二区三区国产精华液| 无码 在线 在线| 日本三级欧美三级| 91精品专区国产盗摄| 色婷婷天天综合在线| 国产成人综合久久精品尤物| 国产精品尹人在线观看| 国产精品hd在线播放| 日韩欧美中文| 丁香亚洲综合五月天婷婷| 大学生久久香蕉国产线观看| 免费无遮挡AV| 久久综合干| 欧洲高清无码在线| 亚洲国产精品久久久久秋霞影院| 国产女人在线视频| 成人午夜亚洲影视在线观看| 噜噜噜久久| 国产精品毛片一区视频播| 亚洲欧美国产高清va在线播放| 欧美午夜视频在线| 无码专区在线观看| a天堂视频| 三上悠亚在线精品二区| 亚洲女同欧美在线| 高清不卡毛片| 国内精品伊人久久久久7777人| 亚洲第一精品福利| 国产特一级毛片| 国产不卡国语在线| 欧美成人h精品网站| 亚洲日本韩在线观看| 日韩 欧美 小说 综合网 另类| 亚洲久悠悠色悠在线播放| av无码一区二区三区在线| 依依成人精品无v国产| 欧美视频在线第一页| 国产视频久久久久| 暴力调教一区二区三区| 国产玖玖视频| 亚洲无码精彩视频在线观看| 久久亚洲精少妇毛片午夜无码| 国产乱视频网站| 欧美爱爱网| 久久国产V一级毛多内射| 中文字幕va| 亚洲三级色| 另类综合视频| 青青草原国产精品啪啪视频| 日韩天堂网| 午夜福利在线观看成人| 成人在线综合| 视频国产精品丝袜第一页| 国内毛片视频| 欧美亚洲中文精品三区| 国产精品熟女亚洲AV麻豆| 在线亚洲天堂| 国产黄网永久免费| 日本欧美一二三区色视频| 日本一区二区三区精品国产| 9久久伊人精品综合| 91小视频在线| 国产极品粉嫩小泬免费看| 青青青草国产| 免费Aⅴ片在线观看蜜芽Tⅴ| hezyo加勒比一区二区三区| 亚洲高清中文字幕在线看不卡| 99青青青精品视频在线| 精品小视频在线观看| 午夜不卡视频| 久久香蕉国产线看精品| 人妻一本久道久久综合久久鬼色| 怡春院欧美一区二区三区免费| 美女一级毛片无遮挡内谢| 亚洲无码高清一区| 亚洲精品福利网站| 久久久久久高潮白浆| 免费高清毛片| 日日碰狠狠添天天爽| 国产人成网线在线播放va| 国产精品中文免费福利| 制服丝袜在线视频香蕉|