我们知道,数组是一串内存连续的集合,当我们的指针指向数组的时候,这个指针则指向该数组的第一个元素的地址,例如:


    int main(){
        int A[5] = {2,4,5,8,1};
        int* p;
        p = &A[0]  // 或者p = A;(因为是数组,数组的名称相当于数组的地址,所以此处不用取地址符&)

        printf("%d", p);     // 数组会以第一个元素的地址作为整个数组的地址,所以为A[0]的地址
        printf("%d", *p);    // 对数组进行解引用,输出第一个数组元素的值,输出2
        printf("%d", p+1);   // 输出第1+1元素的地址,则输出A[1]的地址
        printf("%d", *(p+1));// 对第1+1元素进行解引用,输出这个元素的值,即为A[1]的值,即为4
        return 0;
    }
								

  注意:

  数组可以用&A[i]或(A+i)来获取对应元素的地址,

  同时可以用A[i]或*(A+i)来获取对应元素的值。

  例如我们对数组进行以下操作:


    int main(){
        int A[] = {2,4,5,8,1};

        printf("%d", A);     // 输出数组的地址,即A[0]的地址
        printf("%d", &A[0]); // 输出元素A[0]的地址
        printf("%d", A[0]);  // 输出元素A[0]的值
        printf("%d", *A;     // 输出数组A的地址的值,即A[0]的值
        return 0;
    }