<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 8.C語言指向多維數組的指針 本小節以二維數組為例介紹多維數組的指針變量。 ## 多維數組的地址 設有整型二維數組a[3][4]如下: 0 ? 1 ? 2 ? 3 4 ? 5 ? 6 ? 7 8 ? 9 ?10 ?11? 它的定義為: ? ? int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}} 設數組a的首地址為1000,各下標變量的首地址及其值如圖所示。 ![](http://www.lvtao.net/content/uploadfile/201404/caf1d898eb0ffb4334b95e7615662cfd20140421044302.gif) 前面介紹過,C語言允許把一個二維數組分解為多個一維數組來處理。因此數組a可分解為三個一維數組,即a[0]、a[1]、a[2]。每一個一維數組又含有四個元素。 ![](http://www.lvtao.net/content/uploadfile/201404/d699bf20e11857909651c7fe4bac2b3e20140421044302.gif) 例如a[0]數組,含有a[0][0],a[0][1],a[0][2],a[0][3]四個元素。 數組及數組元素的地址表示如下:從二維數組的角度來看,a是二維數組名,a代表整個二維數組的首地址,也是二維數組0行的首地址,等于1000。a+1代表第一行的首地址,等于1008。如圖: ![](http://www.lvtao.net/content/uploadfile/201404/1852c2e5bbae86eb7a7c96200753697520140421044302.gif) a[0]是第一個一維數組的數組名和首地址,因此也為1000。*(a+0)或*a是與a[0]等效的, 它表示一維數組a[0]0 號元素的首地址,也為1000。&a[0][0]是二維數組a的0行0列元素首地址,同樣是1000。因此,a,a[0],*(a+0),*a,&a[0][0]是相等的。 同理,a+1是二維數組1行的首地址,等于1008。a[1]是第二個一維數組的數組名和首地址,因此也為1008。&a[1][0]是二維數組a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。 由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。 此外,&a[i]和a[i]也是等同的。因為在二維數組中不能把&a[i]理解為元素a[i]的地址,不存在元素a[i]。C語言規定,它是一種地址計算方法,表示數組a第i行首地址。由此,我們得出:a[i],&a[i],*(a+i)和a+i也都是等同的。 另外,a[0]也可以看成是a[0]+0,是一維數組a[0]的0號元素的首地址,而a[0]+1則是a[0]的1號元素首地址,由此可得出a[i]+j則是一維數組a[i]的j號元素首地址,它等于&a[i][j]。 由a[i]=*(a+i)得a[i]+j=*(a+i)+j。由于*(a+i)+j是二維數組a的i行j列元素的首地址,所以,該元素的值等于*(*(a+i)+j)。 【例10-22】 ~~~ main(){ int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; printf("%d,",a); printf("%d,",*a); printf("%d,",a[0]); printf("%d,",&a[0]); printf("%d\n",&a[0][0]); printf("%d,",a+1); printf("%d,",*(a+1)); printf("%d,",a[1]); printf("%d,",&a[1]); printf("%d\n",&a[1][0]); printf("%d,",a+2); printf("%d,",*(a+2)); printf("%d,",a[2]); printf("%d,",&a[2]); printf("%d\n",&a[2][0]); printf("%d,",a[1]+1); printf("%d\n",*(a+1)+1); printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1)); } ~~~ ## 指向多維數組的指針變量 把二維數組a分解為一維數組a[0]、a[1]、a[2]之后,設p為指向二維數組的指針變量。可定義為: ? ? int (*p)[4] 它表示p是一個指針變量,它指向包含4個元素的一維數組。若指向第一個一維數組a[0],其值等于a,a[0],或&a[0][0]等。而p+i則指向一維數組a[i]。從前面的分析可得出*(p+i)+j是二維數組i行j 列的元素的地址,而*(*(p+i)+j)則是i行j列元素的值。 二維數組指針變量說明的一般形式為: ? ? 類型說明符? (*指針變量名)[長度] 其中“類型說明符”為所指數組的數據類型。“*”表示其后的變量是指針類型。“長度”表示二維數組分解為多個一維數組時,一維數組的長度,也就是二維數組的列數。應注意“(*指針變量名)”兩邊的括號不可少,如缺少括號則表示是指針數組(本章后面介紹),意義就完全不同了。 【例10-23】 ~~~ main(){ int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; int(*p)[4]; int i,j; p=a; for(i=0;i<3;i++){ for(j=0;j<4;j++) printf("%2d ",*(*(p+i)+j)); printf("\n"); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看