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

C語言的那些小秘密之指針(三)

發布時間:2016-2-18 14:14    發布者:designapp
關鍵詞: C語言 , 指針
  但凡人都是急功近利和有惰性的,我就是個例子。不想每篇博客都寫一個摘要和那些大段的文字描述,但是為了讓一些新的讀者朋友了解我的博客內容,我還是像前面說的那樣,把第一篇關于指針的摘要搬過來,因為我寫的這幾篇都是關于指針的,所以沒有必要每篇一個摘要,在此就偷偷懶了,如果讀過我前面兩篇C指針博客的朋友可以跳過這篇博客前面的摘要不讀,直接進入主題部分。
  懂得C語言的人都知道,C語言之所以強大,以及其自由性,絕大部分體現在其靈活的指針運用上。因此,說指針是c語言的靈魂,一點都不為過。所以從我的標題加了個(一)也可以看出指針的重要性,我盡可能的向大家交代清楚我對于指針的理解。所以在講解的過程中我盡可能的用代碼加文字的描述方式,通過代碼的分析來加深我們對于指針的理解,我給出的都是完整的代碼,所以讀者可以在看的過程中直接copy下去即可運行,希望下面的講解能夠對你有所幫助。
  在C語言中我們可以使用兩種方法來訪問一個字符串。
  1、用字符數組存放一個字符串
  char str[ ]="this is str!!!";
  在此str是一個數組名,代表字符串數組的首地址。
  2、用字符指針指向一個字符串
  char *str="this is str,too";
  C語言對于字符串常量是按照字符數組的方式來進行處理的,在內存開辟了一個字符數組來存放字符串常量。在此的str被定義為一個指針變量,指向字符型數組,它只能指向一個字符變量和其他的字符數據。輸出都是使用printf("%s",str);,在此過程中系統會先輸出一個str所指向的字符數據,然后使用str加1的方法輸出下一個字符,知道遇到'\0'串結束符為止,在內存中的字符串的最后都被自動加上一個'\0'。
  字符串的傳遞可以使用傳址的方法,用字符數組的名字或者用指向字符數組的指針變量作為參數。在被調用的函數中可以改變字符串的內容,主函數可以得到改變了的字符串。
  一、用字符數組作為參數
  接下來看看一個代碼:
  #include
  void copy_string(char from[],char to[])
  {
  int i=0;
  while(from[i ]!='\0'){
  (to[i ]=from[i ]);
  i++;
  }
  to[i ]='\0';
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  運行結果為:
  


  僅僅從代碼實現的難易程度來看的話沒有什么難點,但是可能有不少人可能會把我們代碼中用紅色標志的代碼部分忘掉,從而出錯。
  在此也給出我的另外一種實現方式:
  #include
  void copy_string(char from[],char to[])
  {
  int i=0;
  while((to[i ]=from[i++])!='\0'){
  ;
  }
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  運行結果為:
  


  值得注意的是這種實現方式的中的巧妙的利用了while語句while((to[i ]=from[i++])!='\0')。千萬不要寫成 while((to[i++]=from[i++])!='\0'),這樣的話每次執行判斷語句是i++被執行了兩次,導致最終的結果出錯。
  二、用字符指針變量
  #include
  void copy_string(char *from,char *to)
  {
  int i=0;
  while(*from!='\0')
  *to++=*from++;
  *to='\0';
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  運行結果為:
  


  在此我也給出一種結合逗號表達式和for循環語句來實現的參考代碼:
  #include
  void copy_string(char *from,char *to)
  {
  int i=0;
  for(;*to=*from,*from!='\0';from++,to++);
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  運行結果為:
  


  代碼的巧妙之處在于結合了逗號表達式和for循環語句來實現,因為逗號表達式的結果為最后一個表達式的結果,所以執行判斷語句里邊的逗號表達式時其所取的值依然為*from!='\0'。
  有興趣的讀者自己可以嘗試下其他的實現方法,下面再給出幾種很巧妙的實現方法,有興趣的讀者可以自己研究下其實現原理,均為完整代碼。
  #include
  void copy_string(char *from,char *to)
  {
  int i=0;
  for(;*to++=*from++;);
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  #include
  void copy_string(char *from,char *to)
  {
  int i=0;
  while(*to++=*from++);
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  #include
  void copy_string(char *from,char *to)
  {
  int i=0;
  while((*to++=*from++)!='\0');
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  #include
  void copy_string(char *from,char *to)
  {
  char*p1,*p2;
  p1=from;
  p2=to;
  while((*p2++=*p1++)!='\0');
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  #include
  void copy_string(char from[],char to[])
  {
  char*p1,*p2;
  p1=from;
  p2=to;
  while((*p2++=*p1++)!='\0');
  return ;
  }
  int main()
  {
  char str[]="this is a string!";
  printf("%s\n",str);
  char dec_str[206];
  copy_string(str,dec_str);
  printf("%s\n",dec_str);
  return 0;
  }
  就不在此一一貼出運行結果了,運行結果同上,如果有興趣可以自己研究下以上代碼,同時還有很多的實現方法,希望以上代碼能夠啟發讀者的靈感寫出更多的實現方法和更好的實現方案來。
                                
本文地址:http://www.qingdxww.cn/thread-160870-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 5分鐘詳解定時器/計數器E和波形擴展!
  • 想要避免發生災難,就用MPLAB® SiC電源仿真器!
  • 安靜高效的電機控制——這才是正確的方向!
  • 為何選擇集成電平轉換?
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美久久一区二区 | 18到20女人一级毛片 | 精品国产高清露脸在线观看 | 四虎影片 | 欧美整片完整片视频在线 | 四虎影视精品永久免费 | 99久久精品免费精品国产 | 日日干日日插 | 日日夜夜噜噜 | 亚洲大尺度视频 | 国产午夜精品久久久久免费视小说 | 日韩一级在线视频 | 高清不卡视频 | 色播在线永久免费视频 | 亚洲男人的天堂在线 | 精品资源在线 | juc-398中文字幕 | 精品一区二区三区四区五区六区 | xx中文字幕乱偷avxx | 国产黄色小视频网站 | 欧美午夜精品一区二区三区 | jizz日本女护士 | 欧美日韩色黄大片在线视频 | 国内一级特黄女人精品片 | 久草色在线 | 国产91网站在线观看 | 亚洲精品视频区 | 免费观看成人www精品视频在线 | 五月婷婷开心综合 | 欧美一二三区 | 欧美三区在线观看 | 国产91第一页 | 成人亚洲欧美日韩中文字幕 | 精品视频h | 免费人成毛片乱码 | 日韩在线观看一区二区不卡视频 | 日本在线色 | 77788色淫免费网站视频 | 国产欧美一区二区 | 久久国产福利 | 日本精品一区二区 |