华为外包公司的面试题,莫名其妙!高手指点

particle80 2005-03-11 09:49:38
struct point{
int x,y;
}

int main()
{
point *a,*b;
a=200;
b=a+1;
print("struct a=%d, struct b=%d",a,b);
return 0;
}
请问输出结果是:


我写不知道。哈哈,高手指点一下,好像题目就是那样。
...全文
2248 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
sct02 2005-03-18
  • 打赏
  • 举报
回复
这个问题有意思
Chillbon 2005-03-14
  • 打赏
  • 举报
回复
信利??
我也去过
呵呵
IEQQ 2005-03-14
  • 打赏
  • 举报
回复

我靠, 妈的指针还可以赋值。

你应该立刻告诉他, 这个代码错了, 就可以了。

不光高级语言里面,指针不允许直接赋值。

连汇编里面 CX 指针寄存器也不可以直接赋值啊。 可能面使馆故意考考你,看你是不是能发现吧。
ilovevc 2005-03-14
  • 打赏
  • 举报
回复
200 + sizeof(int) * 2
sizeof(int) 具体是多少各个平台都不同的。因此204也是可能的。将来64位
机器结果就应该是216。
diaosan 2005-03-14
  • 打赏
  • 举报
回复
我运行了一下也是。。。
xxxdg 2005-03-14
  • 打赏
  • 举报
回复
一般情况下,
c++是会做类型检查的,

所以个人觉得考这种题目有点无聊了
属于中国人的考试方式,
考的不是技能,
而是出题者的思维。
xxxdg 2005-03-14
  • 打赏
  • 举报
回复
指针不过就是四字节的变量么,
所以point * 类型的a存放200这个数据当然是可以的,
指针的运算是以类型为基础的,
所以a+1的地址其实就是 200 + sizeof(point)
在看数组与指针这一部分的时候,就可以引申到这儿了
32位编译器下的,当然b就是208
没注明是tc啥的,两个字节就不考虑了

这跟对齐没什么关系,两个成员都是一样的int,
哪有对齐的问题
arbeisi210 2005-03-13
  • 打赏
  • 举报
回复
struct point
{
int x,y;
} ;

int main()
{
struct point *a,*b;
a=200;
b=a+1;
printf("struct a=%d, struct b=%d",a,b);
return 0;
}

我怎么看是200,204呢(在TC下)??

xxuu503 2005-03-13
  • 打赏
  • 举报
回复
有空参考一下林锐的《C++高质量编程》一书,很多题目选择那里,而且很能考人。


我得看看,Too BT
shenzhen_1 2005-03-12
  • 打赏
  • 举报
回复
hehe
Lovell 2005-03-12
  • 打赏
  • 举报
回复
200 208 是对的;

有空参考一下林锐的《C++高质量编程》一书,很多题目选择那里,而且很能考人。
holymoon858 2005-03-12
  • 打赏
  • 举报
回复
绝对的烂题!考归考,但是真真的程序中谁会这么用!出题也要出得有意义,有价值!
yu2680020 2005-03-12
  • 打赏
  • 举报
回复
不知道你在哪里弄来得题目说是华为的,是问题就是问题,
roling520 2005-03-12
  • 打赏
  • 举报
回复
我觉得也是考你的指针算法:*A 有两个参数他们都是INT 的在内存中都占个字节2个字节(16位系统中)或4个字节(32位系统中) 由于那个指针只定义了一个数据``所以只分配了一个INT的空间也就是4个字节 也就是b=a+1; 应该等于 :B=4+4。

个人意见``可能不对`见量
yuchengliu 2005-03-12
  • 打赏
  • 举报
回复
javence 2005-03-12
  • 打赏
  • 举报
回复
200 208 是对的,其实华为也是考的些基本东西,只是比较灵活而已!

adafirst3219 2005-03-12
  • 打赏
  • 举报
回复
访问指针指向的内容就出现访问错误,可以用某个函数更改这个地址的内存保护模式,可以访问到数据吧,试试
adafirst3219 2005-03-12
  • 打赏
  • 举报
回复
给指针赋值一般不能直接赋值,可以象下面这样嘛:
#include <memory.h>

typedef struct point{
int x;
int y;
}spoint;

int main(int argc, char* argv[])
{
spoint *a,*b;
int v=200;
memcpy(&a,&v,4);
b=a+1;
printf("a=%d,b=%d",a,b);
return 0;
}
WaterCold 2005-03-12
  • 打赏
  • 举报
回复
我也在信利见过了;;
那里的题目真是太难了,一个小时更本做不完
faint~~~~我也不打算去了,那协议简直BT,,,
xialin168 2005-03-12
  • 打赏
  • 举报
回复
TO: mntcqtrend()
这个还好了。
如果是这样
struct point{
int x;
char y;
double z;
};
那就不是4+1+8.而应该是8+8.这又牵涉到对齐的问题了.当然依操作系统和编译器的不同而不同

正解!
对齐问题在tc++下不用考虑!

加载更多回复(32)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧