亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        C語言筆記第五章數(shù)組和指針的關(guān)系

        字號:

        第五章 數(shù)組和指針的關(guān)系
            如果對聲明數(shù)組的語句不太明白的話,請參閱我前段時(shí)間貼出的文章<<如何
            理解c和c++的復(fù)雜類型聲明>>。
            數(shù)組的數(shù)組名其實(shí)可以看作一個(gè)指針??聪吕?BR>    例八:
            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);
            上例中,一般而言數(shù)組名array代表數(shù)組本身,類型是int [10],但如果把a(bǔ)
            rray看做指針的話,它指向數(shù)組的第0個(gè)單元,類型是int *,所指向的類型是數(shù)
            組單元的類型即int。因此*array等于0就一點(diǎn)也不奇怪了。同理,array+3是一個(gè)
            指向數(shù)組第3個(gè)單元的指針,所以*(array+3)等于3。其它依此類推。
            例九:
            例九:
            char *str[3]={
            "Hello,this is a sample!",
            "Hi,good morning.",
            "Hello world"
            };
            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是一個(gè)三單元的數(shù)組,該數(shù)組的每個(gè)單元都是一個(gè)指針,這些指
            針各指向一個(gè)字符串。把指針數(shù)組名str當(dāng)作一個(gè)指針的話,它指向數(shù)組的第0號
            單元,它的類型是char**,它指向的類型是char *。
            *str也是一個(gè)指針,它的類型是char*,它所指向的類型是char,它指向的地
            址是字符串"Hello,this is a sample!"的第一個(gè)字符的地址,即'H'的地址。
            str+1也是一個(gè)指針,它指向數(shù)組的第1號單元,它的類型是char**,它指向
            的類型是char *。
            *(str+1)也是一個(gè)指針,它的類型是char*,它所指向的類型是char,它指向
            "Hi,good morning."的第一個(gè)字符'H',等等。
            下面總結(jié)一下數(shù)組的數(shù)組名的問題。聲明了一個(gè)數(shù)組TYPE array[n],則數(shù)組
            名稱array就有了兩重含義:第一,它代表整個(gè)數(shù)組,它的類型是TYPE [n];第二
            ,它是一個(gè)指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數(shù)組
            單元的類型,該指針指向的內(nèi)存區(qū)就是數(shù)組第0號單元,該指針自己占有單獨(dú)的內(nèi)
            存區(qū),注意它和數(shù)組第0號單元占據(jù)的內(nèi)存區(qū)是不同的。該指針的值是不能修改的
            ,即類似array++的表達(dá)式是錯誤的。
            在不同的表達(dá)式中數(shù)組名array可以扮演不同的角色。
            在表達(dá)式sizeof(array)中,數(shù)組名array代表數(shù)組本身,故這時(shí)sizeof函數(shù)
            測出的是整個(gè)數(shù)組的大小。
            在表達(dá)式*array中,array扮演的是指針,因此這個(gè)表達(dá)式的結(jié)果就是數(shù)組第
            0號單元的值。sizeof(*array)測出的是數(shù)組單元的大小。
            表達(dá)式array+n(其中n=0,1,2,....。)中,array扮演的是指針,故arr
            ay+n的結(jié)果是一個(gè)指針,它的類型是TYPE*,它指向的類型是TYPE,它指向數(shù)組第
            n號單元。故sizeof(array+n)測出的是指針類型的大小。
            例十:
            int array[10];
            int (*ptr)[10];
            ptr=&array;
            上例中ptr是一個(gè)指針,它的類型是int (*)[10],他指向的類型是int [10]
            ,我們用整個(gè)數(shù)組的首地址來初始化它。在語句ptr=&array中,array代表數(shù)組本
            身。
            本節(jié)中提到了函數(shù)sizeof(),那么我來問一問,sizeof(指針名稱)測出的究
            竟是指針自身類型的大小呢還是指針?biāo)赶虻念愋偷拇笮??答案是前者。例如?BR>    int (*ptr)[10];
            則在32位程序中,有:
            sizeof(int(*)[10])==4
            sizeof(int [10])==40
            sizeof(ptr)==4
            實(shí)際上,sizeof(對象)測出的都是對象自身的類型的大小,而不是別的什么
            類型的大小。