天天看點

數組指針的三種定義方法

用 typedef 定義一個數組類型

有 typedef 是類型,沒有是變量

數組類型 typedef int A[8]; 數組類型,int  + 8個确定的變量

                //typedef int (A)[8];

                A b;//int b[8]    //去了typedef,b替換到A的位置

//數組指針, 指針數組

//指針數組,它是數組,每個元素都是指針

//數組指針,指向數組的指針

//[]的優先級比*高

char *a[] = {"aaaaa", "bbbbb", "cccccc"};

int main(int argc, char *argv[])

//argc 傳參的個數(包括可執行程式)argv:指針數組,指向輸入的參數

//數組指針,它是指針,指向一個數組的指針

//數組指針,指向一維數組的整個數組,而不是首元素位址

//定義數組指針變量

1.先定義數組類型,根據類型定義指針變量

int a[10] = {0};
typdef int A[10];       //[10]代表步長
                        //數組指針和指針的差別:
                        //數組指針的步長是sizeof(int)*10;指針的步長是sizeof(int)
A *p = NULL;            //p數組指針類型的變量!!!!!!
p = &a                  // p = a;警告,a代表首元素位址,a和&a一樣,最終也是當&a處理
for(i = 0; i < 10; i++)
{
    //a[];
    //p = &a;
    //*p = *&a ->a;
    (*p)[i] = i+1;
}
for(i = 0; i < 10; i++)
{
    printf("%d, ", (*p)[i]);
}
           

2.先定義數組指針類型,根據類型定義變量

//和指針數組寫法很類似,多了()

//()和[]優先級一樣,左往右    //*p[3]  指針數組;(*p)[]  數組指針   差別

//()有指針,他是一個指針,[]

//指向數組的指針,有typedef,他是一個數組指針類型 

int a[10] = {0};
typedef int(*P)[10];
P q;                        //數組指針變量
q = &a;
for(i = 0; i < 10; i++)
{
    (*p)[i] = i+1;
}
for(i = 0; i < 10; i++)
{
    printf("%d, ",(*p)[i]);
}
           

3.直接定義數組指針變量

//和指針數組寫法很類似,多了()

//()和[]優先級一樣,左往右

//()有指針,他是一個指針,[]

//指向數組的指針,沒有typedef,他是一個數組指針變量

int a[10] = {0};
int(*q)[10];                //q數組指針變量
q = &a;
for(i = 0; i < 10; i++)
{
    (*p)[i] = i+1;
}
for(i = 0; i < 10; i++)
{
    printf("%d, ",(*p)[i]);
}
           

//數組指針的定義

1.
int a[10] = {0};
typedef int A[10];
A *p1 = &a;            //A *p1; p1 = &a;

2.
typedef int (*P)[10];
p q2 = &a;            //P q2; q2 = &a;

3.
int (*q3)[10];
q3 = &a;                //q3 = &a;

           

繼續閱讀