下标访问的原理
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int i;
for (i = 0; i < 10; i++)
{
printf("%d\n",*(arr + i));
}
//下标访问[]的作用 偏移 + 间接引用 先偏移后引用 []里的数值为偏移量
//数组名一边情况下代表首元素的地址
//当数组名与&或sizeof结合代表整个数组
//对整个数组的地址间接引用得到首元素的地址
//数组名是一个常量
//指针偏移的大小取决于指针指向的类型
int* p = arr;
/*printf("%p\n",arr);
printf("%d\n",*arr);
printf("%p\n",arr + 1);
printf("%d\n",*(arr + 1));*/
//printf("%p\n",arr);//首元素的地址
//printf("%p\n",arr + 1);
//printf("%p\n", &arr);//整个数组的地址
//printf("%p\n", &arr + 1);
//
printf("%d\n",*arr);
printf("%d\n",**&arr);
指针数组
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int e = 50;
int* arr[5] = {&a,&b,&c,&d,&e};
int i;
for (i = 0; i < 5; i++)
{
//printf("%d\n",*arr[i]);
//printf("%d\n", **(arr + i));
printf("%d\n",arr[i][0]);
}
数组指针
int arr[5] = {10,20,30,40,50};
int(*p)[5] = &arr;
/*printf("%d\n",sizeof(p));
printf("%d\n",sizeof(int (*)[5]));
printf("%d\n",sizeof(int * [5]));*/
int i;
for (i = 0; i < 5; i++)
{
printf("%d\n",*(*p + i));
}