<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢(mèng)蝶

    生活、程序、未來
       :: 首頁(yè) ::  ::  :: 聚合  :: 管理

    指針與數(shù)組

    Posted on 2009-02-17 00:05 dennis 閱讀(1977) 評(píng)論(4)  編輯  收藏 所屬分類: linux & C
    一、什么時(shí)候數(shù)組和指針是相同的
    1、表達(dá)式中的數(shù)組名(與聲明不同)被編譯器當(dāng)作一個(gè)指向該數(shù)組第一個(gè)元素的指針
    因此如a[i]這樣的訪問都被編譯器改寫或解釋為*(a+i)的形式,同樣取下標(biāo)操作符的操作數(shù)是可交換的,所以a[3]可以寫成3[a],不過通常你不會(huì)這樣做。

    2、下標(biāo)總是與指針的偏移量相同,下標(biāo)*sizeof(元素類型)就是偏移數(shù)組起始地址的實(shí)際字節(jié)數(shù)。

    3、“作為函數(shù)參數(shù)的數(shù)組名”等同于指針,任何傳遞給函數(shù)的數(shù)組參數(shù)都會(huì)被轉(zhuǎn)換成指針,這是基于效率考慮,避免了數(shù)組的拷貝。在函數(shù)內(nèi)部,數(shù)組參數(shù)都將被轉(zhuǎn)換成一個(gè)指針,要牢記這一點(diǎn),因此如:
    void test(char a[10])
    {
       printf(
    "%d\n",sizeof(a));
    }

    顯然應(yīng)該打印指針大小4,而非數(shù)組大小。另外,注意數(shù)組參數(shù)的地址跟數(shù)組參數(shù)第一個(gè)元素的地址并不相等,在表達(dá)式中兩者一致,但是在函數(shù)調(diào)用中,由于數(shù)組參數(shù)指針也是臨時(shí)變量,因此兩者的地址是不一樣的。
    可以通過下列程序觀察:

    #include <stdio.h>
    #include 
    <stdlib.h>
    void test1(char a[])
    {
        printf(
    "&a=%x,&(a[0])=%x,&(a[1])=%x\n",&a,&(a[0]),&(a[1]));
    }
    void test2(char *b)
    {
        printf(
    "&b=%x,&(b[0])=%x,&(b[1])=%x\n",&b,&(b[0]),&(b[1])); 
    }
    int main(int argc, char *argv[])
    {
      
    char ga[]="hello";
      printf(
    "&ga=%x,&(ga[0])=%x,&(ga[1])=%x\n",&ga,&(ga[0]),&(ga[1])); 
      test1(ga);
      test2(ga);
      system(
    "pause");
      
    return 0;
    }


    二、指針跟數(shù)組什么時(shí)候不同
    1、如果定義了一個(gè)數(shù)組,在其他文件對(duì)它進(jìn)行聲明也必須聲明為數(shù)組,定義和聲明必須匹配,指針也是如此。
    2、指針始終是指針,它絕不可以寫成數(shù)組。可以用下標(biāo)形式訪問指針的時(shí)候,一般都是指針作為函數(shù)參數(shù)時(shí),并且你知道傳遞給函數(shù)的實(shí)際是一個(gè)數(shù)組。
    3、數(shù)組名是不可改變的左值,因此如
    int array[100],array2[100];
    array
    =array2;
    array++;
    array--;
     
    都將出錯(cuò),但是在函數(shù)內(nèi)部:

    int array2[100];
    void fun(int array[])
    {
      array
    =array2;
    }

    卻可以,因?yàn)樵诤瘮?shù)內(nèi)部array雖然被聲明為數(shù)組實(shí)際上卻是指針。







    評(píng)論

    # re: 指針與數(shù)組  回復(fù)  更多評(píng)論   

    2009-02-18 20:03 by ychael
    轉(zhuǎn)到C了啊?

    # re: 指針與數(shù)組  回復(fù)  更多評(píng)論   

    2009-02-18 23:20 by dennis
    @ychael
    談不上轉(zhuǎn),C/c++本來就有一直在學(xué),最近算是用上了,稍微深入下。

    # re: 指針與數(shù)組  回復(fù)  更多評(píng)論   

    2013-01-04 22:23 by birduu.com
    2、指針始終是指針,它絕不可以寫成數(shù)組。
    這點(diǎn)有點(diǎn)問題的。

    # re: 指針與數(shù)組  回復(fù)  更多評(píng)論   

    2013-01-04 22:27 by birduu.com
    比如有定義 char *p="birduu.com"; 寫成p[0]就代表字母b,其它同理。
    歡迎到birduu.com這個(gè)網(wǎng)站來看看,它提供了簡(jiǎn)明的C語(yǔ)言教程。
    主站蜘蛛池模板: 日韩视频免费在线观看| 一本久到久久亚洲综合| 午夜私人影院免费体验区| 国产乱子影视频上线免费观看| 亚洲熟妇无码久久精品| 4虎永免费最新永久免费地址| 亚洲视频免费在线播放| 色吊丝免费观看网站| 无码国产精品一区二区免费式芒果 | 免费观看久久精彩视频| 国产亚洲成av人片在线观看| 成人无码区免费A∨直播| 亚洲AV无码一区二区三区DV| 99久热只有精品视频免费观看17| 四虎AV永久在线精品免费观看| 在线播放亚洲精品| 久草视频免费在线观看| 亚洲妇女熟BBW| 热re99久久6国产精品免费| 亚洲视频一区在线播放| 无码人妻一区二区三区免费| 色窝窝亚洲AV网在线观看| 91成人免费观看网站| 亚洲色丰满少妇高潮18p| 亚洲男人第一无码aⅴ网站| 中文字幕乱码亚洲无线三区 | 中国在线观看免费的www| 色婷婷亚洲十月十月色天| EEUSS影院WWW在线观看免费| 亚洲国产第一站精品蜜芽| 国产乱子精品免费视观看片| 亚洲人成网站免费播放| 久久精品国产亚洲7777| 57pao国产成视频免费播放| 亚洲AV无码久久精品狠狠爱浪潮| 日韩免费一区二区三区在线播放 | 久久青草91免费观看| avtt天堂网手机版亚洲| 久久久久久久久久免免费精品 | 伊人久久大香线蕉亚洲| 67pao强力打造高清免费|