1、指针加减表示类型元素移动的个数
struct Test{
int Num;
char *pName;
short sDate;
}*p;
以上定义了一个指针p,指向struct Test类型
假设p = 0x1000,有以下结果
p + 1 = p值+sizeof(struct Test);
(unsigned long)p + 1 =0x01000+1 = 0x1001 //将p强转为unsigned long ,结果为unsigned long 加减
(unsigned long *)p + 1 = p值 + sizeof(unsigned long)
2、int a[4] = {1,2,3,4}; //假设32为小端存储
int *p = (int *)((int)a+1); 求*p = ?
(int)a+1仅仅将a值加1,指针移动一个字节,如上图所示,p指针包括了第二元素的最低字节+第一元素的高三字节。
所以*p = 0x2000000
大小端模式:
大端模式:是指一个数据(多字节的数据)的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址
小端模式,是指一个数据(多字节的数据)的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中
0x01小端存储:00 00 00 01
0x01大端存储:01 00 00 00
int a[5][5];
int (*p)[5];
p = a;
&p[4][2] - &a[4][0] = ?
相同类型的指针差值,差的是类型元素的个数。这里类型元素差了2个。
所以&p[4][2] - &a[4][0] = 2