我们知道,数组是一串内存连续的集合,当我们的指针指向数组的时候,这个指针则指向该数组的第一个元素的地址,例如:
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;
}