首頁 > 後端開發 > C#.Net教程 > 數組指針的用法有哪些?

數組指針的用法有哪些?

coldplay.xixi
發布: 2020-06-11 16:20:55
原創
4466 人瀏覽過

數組指針的用法有哪些?

int *a[4]; //指针数组
登入後複製

指標陣列就相當於一次宣告了多個指標。數組的每一個元素都是一個指標。很好理解,下面主要看數組指標

int (*p)[4]; //数组指针
登入後複製

陣列指標就相當於一次宣告了一個指標。只不過這個指標指向很特別,是一個陣列。

[]優先權大於*,故數組指標宣告時要加()。

範例1:

#include<stdio.h>#include<stdlib.h>void main()
{    //数组指针的用法,用处。
    int b[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};    int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。    //int *p2=&b;
    p=&b;    int i=0;    while(i<16)
    {
          printf("%d\t",(*p)[i]);          //printf("%d\t",*p2++);
          i++;
    }
}
登入後複製

printf("%d\t",(*p)[i]);遍歷輸出陣列b;
陣列指標就相當於舞王殭屍一樣,帶了小弟,n就是小弟的個數,透過下標值能直接訪問到具體哪一個小弟,即數組裡哪一個數

數組指針下標自增(i )的時候,指標指向不變。

這裡直接用整形指標就可以實現,而且更方便簡潔。參見上面被註釋部分。

 

例2:把例1的while()語句換掉。

  while(i<4)
    {
          printf("%d\t",(*p++)[0]);
          i++;
    }
登入後複製

例2輸出1 5 9 13,相當於指標一次移動了4個int.16個位元組。

陣列指標自增(*p )時,指標指向移動sizeof(型別)。

其實上句在其他型別指標也適用。

如int *p;

 //指針指向了int,就是整數指針,整數指標有啥特點?就是能保存整形變數的位址。有啥用途?就是p 的時候能指向下一個int型數。所以了?常用指標指向一個陣列。因為他們都是int型的,所以推導出步長了?整數指針的步長為sizeof(int),即4位元組    

//同理可以得到什麼float型指針,char型指針什麼的。 。 。   

同理就得出了數組指針,特點?儲存數組首位址。用途? p 的時候能指向下一個陣列。所以了?要用它來指向一個二維數組。因為二維數組裡的每個元素都是相同類型的(都是int型數組),所以推導出步長了? sizeof(int[4]),即16

//說白了就一指針,指向了數組類型

 

#例3:數組指針指向二維數組。

#include<stdio.h>#include<stdlib.h>void main()
{    int a[3][4]={{1,2,3,4},{11,12,13,14},{21,22,23,24}};    int (*p)[4]; //该语句是定义一个数组指针,指针步长为4个int即16位。
    p=&a;    int i=0;    while(i<3)
    {        //printf("%d\t",(*p)[i]);        //数组指针,指向的是一个数组整体,相当于指针也带了下标,当执行i++操作时,下标+1,得到该数组的下一个元素,        //在该例中,指针没有位移,所以依次输出为1 2 3
        printf("%d\t",(*p++)[0]);        //整型数组类型的指针,指向的是一个数组整体,当执行*p++操作时,指针位移该数组长度的位数        //在该例中,即指针位移4个int的长度,所以输出是1 11 21
        i++;
    }
}
登入後複製

推薦教學:《C影片教學

以上是數組指針的用法有哪些?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板