指针类型的强制转化及实例分析

【前言】

1.指针是一个记录变量地址的变量,在32位系统中指针变量就是一个32bit的变量(一个int的大小)


2.声明不同类型的指针变量隐含了两个重要信息:

a.指针类型决定了指针结合指针运算符的时候,读取内存的字节数;

b.在指针移动(加减1)的时候在内存中移动的字节数。

【实例】

#include <stdio.h>

int main()
{
    int ia = 0x0f1f2f3f;
    int *pint;
    char *pchr;

    pint = &ia;
    pchr = (char *)pint;

    printf("pint:%x pchr:%x\n",pint,pchr);  
    printf("pint+1:%x pchr+1:%x\n",pint+1,pchr+1);
    printf("*pint=0x%x *pchr=0x%x\n",*pint,*pchr);

    printf("0x%x 0x%x 0x%x 0x%x \n",*pchr,*(pchr+1),*(pchr+2),*(pchr+3));
    
    return 0;
}

运行结果分析:

root@cloud2:~/slp# ./a.out 
pint:bfc195ac pchr:bfc195ac              

#指针内容是一样的
pint+1:bfc195b0 pchr+1:bfc195ad   

#不同指针的移动(加减1)的操作对应不同的步长(char 步长为1,int步长为4)
*pint=0xf1f2f3f *pchr=0x3f  

#指针的运算(*)中读取的内存的字节数是不同的
0x3f 0x2f 0x1f 0xf   

#pchr指针的移动(加减)是按照char大小进行移动的


另外,综上结果可以看出内存的存储方式是int的高字节存于低地址,如下图:



------------------------------------------------------------------------------------------------------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值