通过两个例子来加深对一维数组操作的理解
实际是对指针,地址的理解。
当数组名 +1,或数组的地址+1时,加的结果是经过了什么逻辑加乘?
//这些例子主要演示一维数组访问的一些操作
//也是面试里面经常会被问的
//也是最基础的操作,但常容易犯错的
//扫盲写法:
// name[i] == *(name+i) == i[name]
#include <stdio.h>
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
printf("sizeof(arr) = %d\n", sizeof (arr));
printf("&arr = %p\n", &arr);
printf("&arr + 1 = %p\n", &arr + 1);
int (*pa)[10] = &arr;
printf("pa = %p\n", pa);
printf("pa+1 = %p\n", pa + 1);
return 0;
}
//sizeof(arr) = 40
//&arr = 008FF9AC
//&arr + 1 = 008FF9D4
//pa = 008FF9AC
//pa+1 = 008FF9D4
#include <stdio.h>
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
printf("arr[0] = %d\n", arr[0]);
printf("*(arr+0) = %d\n", *(arr+0));
printf("arr = %p\n", &arr);
printf("arr + 1 = %p\n", arr + 1);
printf("&arr[0] = %p\n", &arr[0]);
printf("&arr[0]+1 = %p\n", &arr[0]+1);
return 0;
}
//arr[0] = 1
//*(arr+0) = 1
//arr = 00B5FADC
//arr + 1 = 00B5FAE0
//&arr[0] = 00B5FADC
//&arr[0]+1 = 00B5FAE0
小小的总结:涉及到一维数组地址 +1操作的,都要将操作对象的类型宽度考虑进来