c++17(22)-reinterpret_cast和new动态空间内存申请

reinterpret_cast表示将变量转换为其它类型,但需要按原来的用途使用它时,需要转换为原来的类型,不转换是无法使用的。

#include <iostream>
using namespace std;
struct Info{
    int x[3];
};
int main(int argc, char **argv)
{
	Info myInfo;
    int *a=reinterpret_cast<int *>(&myInfo);
    *a=1;
    *(a+1)=2;
    *(a+2)=3;   
    Info *b=reinterpret_cast<Info *>(a);
    for (int i=0;i<3;i++){
        cout<<b->x[i]<<endl;       
    }
	return 0;
}
1
2
3
Hit any key to continue...
#include <iostream>
using namespace std;
struct Info{
    int x1;
    int x2;
    int x3;
};
int main(int argc, char **argv)
{
	Info myInfo;
    int *a=reinterpret_cast<int *>(&myInfo);
    *a=1;
    *(a+1)=2;
    *(a+2)=3;   
    Info *b=reinterpret_cast<Info *>(a);
    cout<<b->x2<<endl;       
	return 0;
}
2
Hit any key to continue...

下面演示用new动态申请不同大小的堆空间,用作消息结构存储。

#include <iostream>
#include <string.h>
using namespace std;

struct Info{
    int id;
    char mess[1];
};
int main(int argc, char **argv)
{
    string messTxt;
    cout<<"请输入消息内容";
    cin>>messTxt;
    size_t  messLen=messTxt.size();
	void* messInfoPtr=::operator new (sizeof(Info)+messLen) ;
    Info  *a=reinterpret_cast<Info *>(messInfoPtr);
    a->id=1;
    strcpy(a->mess,messTxt.c_str());        
    cout<<a->id<<endl;
    cout<<a->mess<<endl;
    delete messInfoPtr;
	return 0;
}
输入消息内容:hello 
1
hello
Hit any key to continue...
相关推荐
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页