19、二维数组与指针的关系
元素地址类型是int*,且每个元素类型一样,连续。
int *p==&a[0][0];
因为a[0]==&a[0][0],所以int *p=a[0];
a[0][0]==*(p+0)==p[0]
a[0][1]==*(p+1)==p[1]
a[0][2]==*(p+2)==p[2]
a[1][0]==*(p+3)==p[3]
a[1][1]==*(p+4)==p[4]
a[1][2]==*(p+5)==p[5]
&a与&a[0]数值是一样的,但是类型不一样,同时加1,&a是数组的地址,+1是加整个数组的大小,&a[0]是元素的地址,+1是加一个元素的地址。
20、指针的大小:一切指针均如此
32位编译环境下是4字节。
64位编译环境下是8字节。
21、通用类型指针:void *
通用类型就是没有具体类型,什么指针都可以装。
int a; void *p =&a;
double b; void *p=&b;
float c[5]; void *p=&c;
但是可装不可用,只能作为中转站,因为指针的使用是由类型决定的,void*无类型,所以不可使用,*p=34;p+12;都是错误的。
需要将其转换为指定类型,才可以使用,
*(int*)p=34;//将地址转换为int*,相当于&a了,加了个*,再变为a。