指针加减与地址强制转化

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值