一、数组名
数组名在大多数情况下表示为数组首元素的地址,但有两个例外
1.sizeof可用来计算数组所占字节数,sizeof(arr)中的数组arr代表整个数组
2.&arr,此时数组arr代表整个数组的地址
整个数组的地址和数组首元素的地址有什么区别?
假如有int arr[10],数组地址和首元素地址相同,但数组地址+1间隔40个字节,数组首元素地址+1间隔4个字节
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%p\n", arr);
printf("%p\n", &arr);
printf("给两个指针各自加1\n");
printf("%p\n", arr+1);
printf("%p\n", &arr+1);
return 0;
}
如果我们想存放这个间隔40字节的数组的指针就要用到“数组指针”
二、数组指针
数组指针本质上是指针,用于存放整个数组的指针,用int(*p)[10]表示
int main() {
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int(*p)[10] = &arr;
printf("%p\n", p); \\008FF9A4
printf("%p", p+1); \\008FF9CC
return 0;
}
三、指针数组
指针数组本质上是数组,是用来存放指针的数组,用int* arr[10]表示
int main() {
int a = 1;
int b = 2;
int c = 3;
int* arr[3] = { &a,&b,&c };
printf(" % p % p % p", arr[0], arr[1], arr[2]); //008FF818 008FF80C 008FF800
return 0;
}