国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

C語(yǔ)言的那些小秘密之指針(四)

發(fā)布時(shí)間:2016-2-18 14:14    發(fā)布者:designapp
關(guān)鍵詞: C語(yǔ)言 , 指針
  正如前一篇博客所說(shuō)的,但凡人都是急功近利和有惰性的,都不喜歡花時(shí)間去閱讀那些我們認(rèn)為枯燥的文字描述,喜歡直接進(jìn)入主題。但是有時(shí)候恰恰就是因?yàn)槲覀兊倪@種急功近利和惰性,使得我們繞了很大一個(gè)彎,到最后還是回到了文字描述上來(lái),所以我覺(jué)得適當(dāng)?shù)奈淖置枋鱿拢屪x者對(duì)于文章的整體有個(gè)大概的認(rèn)識(shí)之后,再去學(xué)習(xí)能收獲更好的效果。我的前兩篇關(guān)于C指針的博客用的摘要都是copy我第一篇C指針博客的摘要,當(dāng)然這篇也不例外,還是會(huì)引用我第一篇博客的摘要,只是在引用摘要之前我要先交代件事兒,就是關(guān)于函數(shù)指針和指針函數(shù)、以及指針常量和常量指針我就不在此講解了,有興趣的朋友可以參考我之前寫(xiě)的兩篇博客---C語(yǔ)言的那些小秘密之函數(shù)指針和C語(yǔ)言的那些小秘密之const修飾符。
  懂得C語(yǔ)言的人都知道,C語(yǔ)言之所以強(qiáng)大,以及其自由性,絕大部分體現(xiàn)在其靈活的指針運(yùn)用上。因此,說(shuō)指針是c語(yǔ)言的靈魂,一點(diǎn)都不為過(guò)。所以從我的標(biāo)題加了個(gè)(一)也可以看出指針的重要性,我盡可能的向大家交代清楚我對(duì)于指針的理解。所以在講解的過(guò)程中我盡可能的用代碼加文字的描述方式,通過(guò)代碼的分析來(lái)加深我們對(duì)于指針的理解,我給出的都是完整的代碼,所以讀者可以在看的過(guò)程中直接copy下去即可運(yùn)行,希望下面的講解能夠?qū)δ阌兴鶐椭?br />   先讓我們來(lái)看看一段非常熟悉的代碼:
  #include
  void main(int argc,char *argv[])
  {
  while(argc-->1)
  printf("%s\t",*++argv);
  }
  運(yùn)行結(jié)果如下:
  


  可能還是有人不是很了解main函數(shù)里的參數(shù)argc和argv是什么意思,在此做一簡(jiǎn)單的講解,argc為命令行輸入的參數(shù)個(gè)數(shù),在此argc=3,有三個(gè)參數(shù),分別是:fdsa.exe fdsa asdf,argv是一個(gè)指針數(shù)組,在此相當(dāng)于char *argv[0]="fdsa.exe"、char *argv[1]="fdsa"、char *argv[0]="asdf"。有了上面的解釋相信能夠很好的理解main函數(shù)的參數(shù)了。
  現(xiàn)在來(lái)分析下上面的代碼,程序中有一句argv++;但是我們上面的分析是argv是一個(gè)數(shù)組名,而數(shù)組名是不能進(jìn)行這樣的++運(yùn)算的,難道出錯(cuò)了嘛?!但是明明運(yùn)行結(jié)果已經(jīng)就在眼前了,在解釋之前我們?cè)賮?lái)看如下一段代碼:
  #include
  void main()
  {
  char *argv[]={"this","is","shuzu"};
  *++argv;
  }
  編譯發(fā)現(xiàn)出錯(cuò)了。
  好了現(xiàn)在我們可以來(lái)解釋為什么會(huì)出現(xiàn)如上兩種情況了,有種特殊情況就是數(shù)組名作為函數(shù)參數(shù),傳遞的是數(shù)組的首地址,系統(tǒng)會(huì)把形參當(dāng)作變量來(lái)處理,所以如果我們吧main函數(shù)改寫(xiě)為main(int argc,char **argv);就好理解多了。
  看了上面的代碼,接下來(lái)我們看看指針數(shù)組和數(shù)組指針的區(qū)別所在。
  一、指針數(shù)組指的是一個(gè)數(shù)組,數(shù)組中的每個(gè)元素都是指針類(lèi)型,所有的指針都指向不同的地址,所指的地址的數(shù)據(jù)也不一定一樣,但是所指的數(shù)據(jù)類(lèi)型必須一樣。
  二、數(shù)組指針指的是定義的是一個(gè)指針,而指針指向的是數(shù)組,指針指向數(shù)組首單元的地址,對(duì)于數(shù)組內(nèi)部元素的屬性不了解,僅僅是規(guī)定了數(shù)組首單元的地址,通過(guò)它可以找到整個(gè)數(shù)組。
  接下來(lái)看看一段代碼:
  #include
  void main()
  {
  int *p=new int [10];
  int arr[10];
  int (*ptr)[10];
  for(int i=0;i


  在程序中我們打印了數(shù)組a中每個(gè)數(shù)組元素的值和其相應(yīng)的地址,同時(shí)也定義了一個(gè)數(shù)組指針,int (*ptr)[10]; ,在引用數(shù)組指針的過(guò)程中必須要注意的是數(shù)組指針的維數(shù)必須要引用的數(shù)組維數(shù)相同,否從會(huì)出錯(cuò)。我們可以把int (*ptr)[10]; 拆開(kāi)來(lái)看,把指針ptr看成是指向int [10];的類(lèi)型,把int [10]視為一種新的類(lèi)型,所以在使用指針ptr的時(shí)候類(lèi)型必須要一致,即必須是一個(gè)int [10]這樣的數(shù)組。
  對(duì)以上的代碼稍加修改:
  #include
  void main()
  {
  int arr[4][4];
  int (*ptr)[4];
  for(int i=0;i


  可能有的讀者看了int arr[4][4];int (*ptr)[4]; 這兩句代碼之后認(rèn)為接下來(lái)的代碼ptr=arr;有錯(cuò),因?yàn)閍rr是一個(gè)二位數(shù)組,而ptr只是一個(gè)指向int [4]類(lèi)型的指針。但是要注意了,從運(yùn)行結(jié)果我們也可以肯定的是上面的代碼是正確的,但是為什么是正確的呢?!首先我們把a(bǔ)rr分為兩部分來(lái)看,第一部分為int [4],第二部分為arr[4],這樣就一目了然了,我們可以認(rèn)為我們定義了一個(gè)一維數(shù)組arr[4],數(shù)組有四個(gè)元素,每個(gè)元素的類(lèi)型為int [4],因此和一般的數(shù)組一樣,我們可以將該數(shù)組名賦給指針,其實(shí)也就是第一個(gè)元素的地址付給指針。即: ptr=arr;或者ptr=&arr[0]。其余情況以此類(lèi)推。
  下面再來(lái)看看一段代碼:
  #include
  void sum(int s[])
  {
  int i;
  printf("%d\n",s);
  printf("%d\n",*(s+3));
  printf("%d\n",&s);
  printf("%d\n",*s++);
  printf("%d\n",*s++);
  printf("%d\n",*s++);
  printf("%d\n",*s);
  printf("\n");
  }
  void main(int argc,char *argv[])
  {
  int ss[4];
  for(int i=0;i


  在main函數(shù)中我們使用了兩句 printf("%d\n",ss);和 printf("%d\n",&ss);來(lái)打印數(shù)組ss的地址,值得注意的就是數(shù)組的首地址的幾種表示方法,還可以是&ss[0];在調(diào)用ss函數(shù)的過(guò)程中,我們使用的是數(shù)組作為參數(shù),同時(shí)為了加深讀者對(duì)于數(shù)組作為參數(shù)的時(shí)候可以使用++這樣的操作符印象,我在此使用s++的方法打印了整個(gè)數(shù)組。細(xì)心的讀者會(huì)發(fā)現(xiàn)我使用的 printf("%d\n",s);和 printf("%d\n",&s);在此打印的結(jié)果不再一樣了,跟在main函數(shù)中用這樣的語(yǔ)句打印數(shù)組首地址的結(jié)果一致不符合,這也從側(cè)面說(shuō)明了當(dāng)數(shù)組名作為參數(shù)的時(shí)候,系統(tǒng)是將它作為變量處理的,所以打印的結(jié)果不一致。
  指針的講解到此就告一段落了,由于本人水平有限,博客中的不妥或錯(cuò)誤之處在所難免,殷切希望讀者批評(píng)指正。同時(shí)也歡迎讀者共同探討相關(guān)的內(nèi)容,如果樂(lè)意交流的話請(qǐng)留下你寶貴的意見(jiàn)。
                               
               
本文地址:http://www.qingdxww.cn/thread-160874-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專(zhuān)區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來(lái)節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專(zhuān)區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 手机看片高清日韩精品 | 日韩欧美一区二区三区免费看 | 亚洲国产一区在线二区三区 | 日韩中文字幕在线观看视频 | 999精品在线 | 国产一毛片| 中国一级做a爰片久久毛片 中国一级特黄毛片 | 日韩在线二区全免费 | 2019偷偷狠狠的日日 | 亚洲国产欧美久久香综合 | 亚洲一区二区三区日本久久九 | 青青操国产| 黄视频在线观看www 黄视频网址 | 特级毛片视频在线 | 日韩在线视频一区二区三区 | 国产一区二三区 | 99视频在线精品免费 | 男女污视频在线观看 | 向日葵视频app在线无限看免费 | 卡一卡二卡三精品app下载 | 国产成人不卡 | 99热这里只有精品99 | 婷婷成人亚洲 | 肉大捧一进一出视频免费播放 | 国产日韩精品一区二区三区 | 岛国片免费在线观看 | 人人干操 | 91精品国产欧美一区二区 | 激情国产视频 | 免费在线观看黄色的网站 | 国产欧美日韩综合精品一区二区 | 天美传媒无忧传媒果冻传媒 | 在线日韩欧美一区二区三区 | www.亚洲天堂 | 国产婷婷综合在线视频 | 亚洲一区播放 | 黄h视频在线观看视频 | 亚洲麻豆视频 | 隔壁老王国产精品福利 | 黑人性hd | 国产一级黄色 |