• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 牛人業話 > 《C與指針》讀書筆記五

    《C與指針》讀書筆記五

    作者: 時間:2016-08-12 來源:網絡 收藏

      語言編程中應用廣泛。并且與數組有交集。很多情況下數組與結合使用可以事半功倍。我們可以聲明一個數組,并且將其初始化。

    本文引用地址:http://www.czjhyjcfj.com/article/201608/295453.htm

      int arrary[10]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

      數組在聲明時可以同時初始化。以上語句的結果就是聲明一個數組,同時初始化該數組。等價于以下語句:

      int arrary[10];

      int i;

      for( i = 0; i < sizeof (arrary ); i++ )

      {

      arrary[i] = i;

      }

      初始化結束后,在內存中存儲如下:

      數組是通過數組名和下標的結合使用的。arrary是數組名,相當于數組的第一個成員的首地址。下標相當于偏移量。arrary[2]的地址其實相當于arrary+2*sizeof(int)。int是數據類型。在有的系統中是4,在有些系統中是2。在此我們假設int類型是4個字節。

      既然數組通過地址索引使用的,也是地址,那么之間就有天然的共性。所以必定有相同之處。比如我們要實現一個數組復制給另外一個數組。可以使用參照一個產品手冊中提供的示例代碼。

      #include

      #include /* for printf */

      void tst_memcpy (void) {

      char src1 [100] = "opy this string to dst1";

      char dst1 [100];

      char *p;

      p = memcpy (dst1, src1, sizeof (dst1));

      printf ("dst = "%s"n", p);

      }

      作者通過memcpy實現了src1 數組復制給dst1。我們可以看一下memcpy函數的原型說明。

      void *memcpy (

      void *dest, /* destination buffer */

      void *src, /* source buffer */

      int len); /* bytes to copy */

      dest與src都是指針,但是我們傳入參數卻是數組。p = memcpy (dst1, src1, sizeof (dst1));

      dst1與src1是我們聲明的數組。正因為dst1與src1也是地址,與指針意義完全相同,所以實現了數組復制。

      memcpy是編譯器提供標準庫函數。我們也可以自己實現一下,因為是示例,就不過多考慮安全性問題了。

      void *MemCopy( void *dest, void *src, int len)

      {

      int i;

      char *temp;

      temp = dest;

      for( i =0; i < len; i++)

      {

      temp[i] = src[i];

      }

      return dest;

      }

      temp[i] = src[i];我們仍然按照數組方式處理了指針。在這本書上,我看到一種表示方法。arrary[2]其實等價于*(arrary+2).也就是

      arrary[2] = 2;等價于*(arrary+2)=2;

      m = arrary[2]; 等價于m =*(arrary+2);

      熟練以后,如果遇到需要數組復制的,可以自己動手實現。就不使用庫函數了。使用指針傳遞一個數組,確實在傳參方面效率提高很多。比如排序,只要傳入數組的首地址和長度即可。



    關鍵詞: C 指針

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 昌邑市| 四子王旗| 大新县| 辽阳市| 彭泽县| 莱芜市| 荥阳市| 蓬安县| 奎屯市| 绥德县| 搜索| 商丘市| 香格里拉县| 三河市| 齐河县| 尖扎县| 闻喜县| 石渠县| 丹寨县| 罗田县| 甘孜县| 汉阴县| 麟游县| 长宁县| 苍溪县| 沙洋县| 荥经县| 台前县| 阜城县| 定结县| 南汇区| 广平县| 吉安县| 通道| 贡山| 乌拉特后旗| 肃南| 巩留县| 高阳县| 仙游县| 旺苍县|