1.数组指针和指针数组的定义:
int *p[5]; //运算符为p[5],后为*,所以为指针数组
int (*ptr)[5] //先算(),后是[],ptr指向一个5个连续int空间地址,这段地址是匿名的。
2.int a[5]数组的a和&a的区别,对于以下的程序代码:
int main()
{
char a[5]={'a','b','c','d','d'};
char (*ptr1)[5]=&a; //vc编译通过
char (*ptr2)[5]=a; //vc编译出错,不能将指向char字符的指针赋给指向一个char *[5]类型的数组指针;
return 0;
}
而且:
int main()
{
char a[5];
char (*ptr3)[6]=&a; //vc6.0编译出错,cannot convert from 'char (*)[5]' to 'char (*)[10]'
}
4.强制类型转换
struct test
{
int tint;
char *p1;
short sint;
char ch;
short uint;
}*p;
sizeof(p)为16;若p的地址为0x00000010
p+1 实际为0x00000010+sizeof(p)=0x00000020;
(unsigned int)p+1 为0x00000011;
(unsigned int*)p+1 为0x00000014 ;