如下程序#include <stdio.h>struct B
{
int bi;
int bj;
};struct A
{
struct B b;
int ai;
int aj;
};main()
{
struct A * pa = NULL;
struct B * pb = NULL; pa = (struct A *) malloc (sizeof(struct A));
pa->b.bi = 1;
pa->b.bj = 2;
pb = (struct B *) pa; printf("pb->bi=%d pb->bj=%d \r\n", pb->bi, pb->bj);
}在VC6上pb = (struct B *) pa;能正确赋值.但是在VC2005运行时,怎么pb还是NULL;请高手指教,谢谢
{
int bi;
int bj;
};struct A
{
struct B b;
int ai;
int aj;
};main()
{
struct A * pa = NULL;
struct B * pb = NULL; pa = (struct A *) malloc (sizeof(struct A));
pa->b.bi = 1;
pa->b.bj = 2;
pb = (struct B *) pa; printf("pb->bi=%d pb->bj=%d \r\n", pb->bi, pb->bj);
}在VC6上pb = (struct B *) pa;能正确赋值.但是在VC2005运行时,怎么pb还是NULL;请高手指教,谢谢
你用reinterpret_cast吧
至于为什么,我觉得我也讲不清楚,而且跟不同版本编译器的类型检查严格性有关...
你看看static_cast和reinterpret_cast的区别吧
那时候还没有标准c++标准
vc2005的编译环境要求比较严所以会出错
可能你的那段代码不是标准c++程序至于哪里不对我也看不出来
{
int ai;
int aj;
struct B b; // 注意:原文是放在这个结构体开头
};按照这样修改后输出变成,
pb->bi=-842150451 pb->bj=-842150451
Press any key to continue
我刚才测试了下!
VC6。0和VS2005结果都是一样的!一点问题没有!
改成
pb = (struct B *) &(pa->b);能行么?
reinterpret_cast
想不出问题就不要用C++编译C库.
这样做在C++里是禁止的,不管出现什么问题都不要惊讶.