在c语言中数组名有两种特殊情况
第一
用单目操作符 sizeof 计算数组所占据内存大小时,arr代表整个数组
第二
&arr 表示整个数组的地址
重点注意
-
arr 与&arr 一样,但是arr单独拿出来表示首元素的地址,而&arr表示的是整个数组的地址
-
arr 表是首元素地址,那么arr+1 就表示第二个元素的地址,所以在首元素的基础上加上四个字节就是arr+1
===============================================================================
指针
p ,*p, &p
p表示指针变量的名字,
*p表示指针p中存放的内容
&p 就是取指针p的地址
arr、&arr[0]、&arr、指针p之间关系
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5 };
int* p = arr;//arr==&arr[0]==p
int i = 0;
for (i = 0; i < 5; i++)
{
//五者等价
printf("%d ", arr[i]);
printf("%d ", p[i]);
printf("%d ", (&arr[0])[i]);
printf("%d ", *(p+i));
printf("%d ", *(arr + i));
}
return 0;
}
-
arr、&arr[0]、指针p等价,都表示首元素的地址。
-
&arr表示数组的地址
-
arr[i] == *(arr+i) == p[i] == *(p+i)