今天看到一个关于网络的程序,里面有这样一个类型转换,我把问题简化一下
#include "iostream.h"
class test
{
public:
int i;
int j;
};void main()
{
test *p;
char s[100]="1";
p=(test *)s;
cout<<p->i<<endl;
}
他就是这样转换的,这样行吗,
char s[100]="1";
p=(test *)s;
s里面的值可以赋值到i中,但怎么能赋值到j中了,当然了他test里面有很多类型,不止我里面的i,j
还有一点,他是用
char pBuffer[BURRER_SIZE];
recv(sock,pBuffer,BURRER_SIZE,0);
IPHEADER * pIpHdr;
pIpHdr = (IPHEADER *)pBuffer;
IPHEADER是他自定义的结构体,然后别人就开始使用了pIpHdr->SourceAddress=等
既然是他自己定义的结构体,而且又是通过pBuffer强制转换的,他怎么知道pIpHdr->SourceAddress是代表源ip地址了
#include "iostream.h"
class test
{
public:
int i;
int j;
};void main()
{
test *p;
char s[100]="1";
p=(test *)s;
cout<<p->i<<endl;
}
他就是这样转换的,这样行吗,
char s[100]="1";
p=(test *)s;
s里面的值可以赋值到i中,但怎么能赋值到j中了,当然了他test里面有很多类型,不止我里面的i,j
还有一点,他是用
char pBuffer[BURRER_SIZE];
recv(sock,pBuffer,BURRER_SIZE,0);
IPHEADER * pIpHdr;
pIpHdr = (IPHEADER *)pBuffer;
IPHEADER是他自定义的结构体,然后别人就开始使用了pIpHdr->SourceAddress=等
既然是他自己定义的结构体,而且又是通过pBuffer强制转换的,他怎么知道pIpHdr->SourceAddress是代表源ip地址了
解决方案 »
- MFC编辑对话框,添加一个编辑框,给编辑框添加一个变量,出现内存不能为written
- MFC 将unsigned long long (uint64_t)转换为CString问题
- 请高手过目一番
- 学vc需要联网不?联网就经常玩.不联网吧.就调试有错的时候.就没法上网问问题啊.
- 属性表显示问题,在线等待!!!
- 如何让对话框有缩放功能?里面的控件也同时缩放
- 请教高手,关于鼠标响应!
- 关于mfc的列表框
- 请教:关于在VC中遇到不能设置brokepoint的问题!
- 如何将一个类似于20020424的长整型数据转换为time_t类型的数据?
- 消息循环
- 怎么在自己的程序中按下截图按钮之后让鼠标不响应其它背景程序?
IPHEADER * pIpHdr;
pIpHdr = (IPHEADER *)pBuffer;就相当于为结构体pIpHdr在堆栈上分配了BURRER_SIZE大小的控件,指针类型可以任意转换,都是4个字节的。指针指向的内容就按指针实际的类型来取值了
因为char x[100]; (test*)x实际上和你写
(test*)maclloc(sizeof(BYTE) * 100);没区别
但是把char里面的字符窜拷贝到test类中是什么原理呢
我的那个模拟程序,怎么才能让j得到值呢,现在只有i得到了值,如果char s[100]="123";
j中还是没有值
那这是什么原理呢,在我上面那个程序中,i得到了s的值
但怎么让 j 也得到s的值了,即使char s[100]="123";也不能让 j 得到值
那这是什么原理呢,在我上面那个程序中,i得到了s的值
但怎么让 j 也得到s的值了,即使char s[100]="123";也不能让 j 得到值