• <tt id="lutwa"></tt>

    <b id="lutwa"></b>

  • <u id="lutwa"><small id="lutwa"></small></u>
    <b id="lutwa"><small id="lutwa"></small></b>
    
    
    <u id="lutwa"><small id="lutwa"></small></u>
  • <u id="lutwa"><small id="lutwa"></small></u>
    更多課程 選擇中心

    C/C++培訓
    達內IT學院

    400-111-8989

    C指針——數組和指針的關系

    • 發布:C++培訓
    • 來源:資料庫
    • 時間:2020-10-21 14:57

    數組的數組名其實可以看作一個指針。

    看下例:

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

    value=array[0]; //也可寫成:value=*array;

    value=array[3]; //也可寫成:value=*(array+3);

    value=array[4]; //也可寫成:value=*(array+4);

    上例中,一般而言數組名 array 代表數組本身,類型是int [10],但如果把 array 看做指針的話,它指向數組的第0個單元,類型是 int* 所指向的類型是數組單元的類型即 int。因此*array 等于0就一點也不奇怪了。同理,array +3 是一個指向數組第3個單元的指針,所以 *(array +3) 等于3。其它依此類推。

    char *str[3]={

    "Hello,thisisasample!",

    "Hi,goodmorning.",

    "Helloworld"

    };

    char s[80];

    strcpy(s,str[0]); //也可寫成strcpy(s,*str);

    strcpy(s,str[1]); //也可寫成strcpy(s,*(str+1));

    strcpy(s,str[2]); //也可寫成strcpy(s,*(str+2));

    上例中,str 是一個三單元的數組,該數組的每個單元都是一個指針,這些指針各指向一個字符串。把指針數組名 str 當作一個指針的話,它指向數組的第0號單元,它的類型是 char **,它指向的類型是 char *。

    *str 也是一個指針,它的類型是 char *,它所指向的類型是 char,它指向的地址是字符串 "Hello,thisisasample!" 的第一個字符的地址,即 'H' 的地址。注意:字符串相當于是一個數組,在內存中以數組的形式儲存,只不過字符串是一個數組常量,內容不可改變,且只能是右值。如果看成指針的話,他即是常量指針,也是指針常量。

    str+1 也是一個指針,它指向數組的第1號單元,它的類型是 char**,它指向的類型是 char*。

    *(str+1) 也是一個指針,它的類型是 char*,它所指向的類型是char,它指向 "Hi,goodmorning." 的第一個字符 'H'。

    下面總結一下數組的數組名(數組中儲存的也是數組)的問題:

    若聲明了一個數組 TYPE array[n],則數組名稱 array 就有了兩重含義:

    第一,它代表整個數組,它的類型是 TYPE[n];

    第二,它是一個常量指針,該指針的類型是 TYPE*,該指針指向的類型是 TYPE,也就是數組單元的類型,該指針指向的內存區就是數組第0號單元,該指針自己占有單獨的內存區,注意它和數組第0號單元占據的內存區是不同的。該指針的值是不能修改的,即類似array++ 的表達式是錯誤的。在不同的表達式中數組名array 可以扮演不同的角色。在表達式 sizeof (array)中,數組名 array 代表數組本身,故這時 sizeof 函數測出的是整個數組的大小。

    在表達式 *array 中,array 扮演的是指針,因此這個表達式的結果就是數組第0號單元的值。sizeof (*array) 測出的是數組單元的大小。

    表達式 array+n(其中 n =0,1,2,.....)中,array 扮演的是指針,故 array+n 的結果是一個指針,它的類型是 TYPE *,它指向的類型是 TYPE,它指向數組第 n 號單元。故 sizeof (array+n) 測出的是指針類型的大小。在32位程序中結果是4。

    int array[10];

    int (*ptr)[10];

    ptr=&array;

    上例中 ptr 是一個指針,它的類型是 int(*) [10],他指向的類型是 int[10] ,我們用整個數組的首地址來初始化它。在語句 ptr=&array 中,array 代表數組本身。

    本節中提到了函數 sizeof (),那么我來問一問,sizeof ( 指針名稱 ) 測出的究竟是指針自身類型的大小呢還是指針所指向的類型的大小?

    答案是前者。例如:

    int(*ptr) [10];

    則在32位程序中,有:

    sizeof(int (*) [10])==4

    sizeof(int [10])==40

    sizeof(ptr)==4

    實際上,sizeof(對象)測出的都是對象自身的類型的大小,而不是別的什么類型的大小。

    當你還在擔心能否就業時,達內學員提前被企業錄取;當你轉輾于各大招聘會時,達內學員收到了高薪offer;當你在各大招聘網站投遞簡歷時,達內學員中有人一畢業進入五百強名企。所以選擇很重要。找C++培訓班,選達內就對了。

    版權聲明:轉載文章來自公開網絡,版權歸作者本人所有,推送文章除非無法確認,我們都會注明作者和來源。如果出處有誤或侵犯到原作者權益,請與我們聯系刪除或授權事宜。

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:C指針——指針的算術運算
    下一篇:C指針——指針和結構類型的關系

    超全的C語言標識符知識

    C指針——指針類型轉換

    C指針——指針和結構類型的關系

    C指針——數組和指針的關系

    • 關注微信公眾號

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美牲交av欧美牲交aⅴ暴力,俄罗斯freeⅹ性欧美,日本加勒比无码中文字幕,放荡的女教师中文字幕