<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ǔ)言教程。
    主站蜘蛛池模板: 亚洲伦理一二三四| 黄视频在线观看免费| 免费人成激情视频| a级毛片毛片免费观看永久| 亚洲精品免费在线| 午夜免费不卡毛片完整版| 免费一区二区无码东京热| 亚洲国产成人99精品激情在线| 亚洲精品A在线观看| 中文字幕免费高清视频| 国产精品亚洲精品日韩电影| 亚洲AV无码码潮喷在线观看| 青苹果乐园免费高清在线| a免费毛片在线播放| 久久亚洲国产成人影院| 亚洲色WWW成人永久网址| 四虎免费在线观看| 亚洲欧洲免费视频| 一级毛片免费播放视频 | 亚洲综合偷自成人网第页色| 亚洲精品无码你懂的网站| 亚洲大片免费观看| 中文字幕不卡免费高清视频| 亚洲精品乱码久久久久蜜桃| 亚洲精选在线观看| 亚洲精品线路一在线观看| 99久久免费国产精品特黄| 97无码人妻福利免费公开在线视频| 亚洲AV无码一区二区三区性色 | 九九视频高清视频免费观看| 亚洲国产成人综合| 国产亚洲无线码一区二区| 可以免费观看的一级毛片| 欧洲乱码伦视频免费| 亚洲a一级免费视频| 99精品视频在线观看免费| 欧洲美女大片免费播放器视频| 亚洲综合av一区二区三区| 亚洲精品第五页中文字幕| 亚洲va中文字幕无码久久不卡 | 久久精品国产亚洲夜色AV网站|