<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 《C與指針》讀書筆記五

          《C與指針》讀書筆記五

          作者: 時(shí)間:2016-08-12 來源:網(wǎng)絡(luò) 收藏

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

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

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

            數(shù)組在聲明時(shí)可以同時(shí)初始化。以上語句的結(jié)果就是聲明一個(gè)數(shù)組,同時(shí)初始化該數(shù)組。等價(jià)于以下語句:

            int arrary[10];

            int i;

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

            {

            arrary[i] = i;

            }

            初始化結(jié)束后,在內(nèi)存中存儲(chǔ)如下:

            數(shù)組是通過數(shù)組名和下標(biāo)的結(jié)合使用的。arrary是數(shù)組名,相當(dāng)于數(shù)組的第一個(gè)成員的首地址。下標(biāo)相當(dāng)于偏移量。arrary[2]的地址其實(shí)相當(dāng)于arrary+2*sizeof(int)。int是數(shù)據(jù)類型。在有的系統(tǒng)中是4,在有些系統(tǒng)中是2。在此我們假設(shè)int類型是4個(gè)字節(jié)。

            既然數(shù)組通過地址索引使用的,也是地址,那么之間就有天然的共性。所以必定有相同之處。比如我們要實(shí)現(xiàn)一個(gè)數(shù)組復(fù)制給另外一個(gè)數(shù)組??梢允褂脜⒄找粋€(gè)產(chǎn)品手冊(cè)中提供的示例代碼。

            #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實(shí)現(xiàn)了src1 數(shù)組復(fù)制給dst1。我們可以看一下memcpy函數(shù)的原型說明。

            void *memcpy (

            void *dest, /* destination buffer */

            void *src, /* source buffer */

            int len); /* bytes to copy */

            dest與src都是指針,但是我們傳入?yún)?shù)卻是數(shù)組。p = memcpy (dst1, src1, sizeof (dst1));

            dst1與src1是我們聲明的數(shù)組。正因?yàn)閐st1與src1也是地址,與指針意義完全相同,所以實(shí)現(xiàn)了數(shù)組復(fù)制。

            memcpy是編譯器提供標(biāo)準(zhǔn)庫函數(shù)。我們也可以自己實(shí)現(xiàn)一下,因?yàn)槭鞘纠筒贿^多考慮安全性問題了。

            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];我們?nèi)匀话凑諗?shù)組方式處理了指針。在這本書上,我看到一種表示方法。arrary[2]其實(shí)等價(jià)于*(arrary+2).也就是

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

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

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



          關(guān)鍵詞: C 指針

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();