如何按INT类型操作CHAR类型数组

这是学习指针的过程中遇到的一个问题的记录。
因为C++指针指向具体的内存地址,开始以为按照内存地址的加减就可以进行任意内存数据区域的操作,实际测试的时候发现,定义的指针有不同的类型,比如:
int * p;
定义的是一个整数型指针。*(p+1)指向的是下一个整型数,也就是内存地址加4(32位系统),不是内存地址加1。如果是字符型指针,则是地址加1,因为char占1个字节。
如果要对char型数组按int型数据操作,编译是不允许的,因为类型不一致。甚至显示强类型转换也不行。这种情况就需要用到无类型指针(void *)。
无类型指针可以指向任意类型指针地址。采用显示强制类型转换,还可以将无类型指针转换为其他类型指针。也就是如果要按int类型操作char数组,需要先转换为无类型指针,然后在转换为int类型指针才能工作。
一下是测试代码:

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    char chArr[] = {0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x00};
    void *void_p = chArr;
    int *int_p = static_cast<int *>(void_p);
    //int *int_p = static_cast<int *>(chArr);   //字符数组指针直接转强制转换到整型指针编译不过

    cout<<"print the content of void_p: "<<static_cast<char *>(void_p)<<"\n";
    cout<<"print the content of int_p: ";
    for(int i = 0; i < sizeof(chArr)/sizeof(int); i++)
    {
        cout<<hex<<*(int_p + i)<<" ";
    }
    return 0;
}

输出结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值