首先明确一些基本概念:
= 等于号两边的数据类型要一致,如果不一致需要显式或者隐式的类型转换;
变量作为右值时,编译器只是取变量的值。
运算符的优先级:()>[]>*
接下来看:
int *p1[10]; 表示是一个数组p1,[]的优先级比*高。元素是指针的数组,指针数组;
int (*p2)[10]; 表示的是一个指针,[]告诉我们这是指向数组的指针。数组中的元素有10个,元素类型int,数组指针。
->私下可以这么理解 int (*)[10] p2; int (*)[10]是指针类型, p2是指针变量;
地址强制转换
struct Test{
int Num;
char *pcName;
short sData;
char cha[2];
short sBa[4];
}*p;
假设p的值为0x100000;
p+0x1= 0x100000+size(Test)*0x1; //结构体大小为20byte,所以p+0x1 = 0x100014。
(unsigned long)p + 0x1 = 0x100001; //因为p已经变成无符号长整型,所以就直接相加即可。
(unsigned int*)p+0x1 = 0x100000+sizeof(unsigned int )*0x1 = 0x100004; //unsigned int有4byte大小。