int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
指针所指向的数据类型加1,那么地址就会加上数据类型对应的字节数
例如:
&a = 0x12ff18
&a+1 = 0x12ff48
a指向的是有12个元素的二维数组,占有30H字节的地址空间
&a[0] = 0x12ff18
&a[0]+1 = 0x12ff28
&a[0]指向的是有4个元素的一维数组,占有10H字节的地址空间
&a[0][0] = 0x12ff18
&a[0][0]+1 = 0x12ff1c
&a[0][0]指向的是一个元素,占有4H字节的地址空间
a = 0x12ff18
a+1 = 0x12ff28
a指向的是有4个元素的一维数组,占有10H字节的地址空间
a[0] = 0x12ff18
a[0]+1 = 0x12ff1c
a[0]指向的是一个元素,占有4H字节的地址空间
程序代码:
#include <stdio.h>
int main()
{
int a[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
printf("a = %#x\n", a);
printf("&a = %#x\n", &a);
printf("*a = %#x\n", *a);
printf("a[0] = %#x\n", a[0]);
printf("a[0]+1 = %#x\n", a[0]+1);
printf("&a[0] = %#x\n", &a[0]);
printf("&a[0]+1 = %#x\n", &a[0]+1);
printf("*a[0] = %#x\n", *a[0]);
printf("a[0][0] = %#x\n", a[0][0]);
printf("&a[0][0] = %#x\n", &a[0][0]);
printf("&a[0][0]+1 = %#x\n", &a[0][0]+1);
// printf("*a[0][0] = %#x\n", *a[0][0]); //error C2100: illegal indirection
printf("\n===========================================\n\n");
printf("a+1 = %#x\n", a+1);
// printf("&(a+1) = %#x\n", &(a+1)); //error C2102: '&' requires l-value
printf("&a+1 = %#x\n", &a+1);
printf("*(a+1) = %#x\n", *(a+1));
printf("*a+1 = %#x\n", *a+1);
printf("a[1] = %#x\n", a[1]);
printf("a[1]+1 = %#x\n", a[1]+1);
printf("&a[1] = %#x\n", &a[1]);
printf("&a[1]+1 = %#x\n", &a[1]+1);
printf("*a[1] = %#x\n", *a[1]);
printf("a[1][0] = %#x\n", a[1][0]);
printf("&a[1][0] = %#x\n", &a[1][0]);
printf("&a[1][0]+1 = %#x\n", &a[1][0]+1);
// printf("*a[1][0] = %#x\n", *a[1][0]);
return 0;
}