网新恒天笔试题

hackbuteer1 2011-09-22 10:34:03
1、下面程序的输出结果为()
class A
{
public:
A(int a)
{
printf("%d ",a);
}
};
A a(1);
int main(void)
{
printf("main ");
A c(2);
static A b(3);
return 0;
}

A、1 main 2 3 B、1 main 3 2 C、main 1 2 3 D、main 1 3 2

2、下面程序的输出结果为()
struct Test
{
unsigned short int a:5;
unsigned short int b:5;
unsigned short int c:6;
};
int main(void)
{
Test test;
test.a=16;
test.b=4;
test.c=0;
int i=*(short*)&test;
printf("%d\n",i);
return 0;
}

A、6 B、144 C、5 D、95

第一个题目感觉很简单,就是A,不知道这个题目是在考察什么。。
这个题目感觉很难,不会做,希望大家给出一个解题思路,这个题目不懂。。。。
...全文
421 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
asd605499941a 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 matrixcl 的回复:]

我觉地1题答案是A没错,但没你想得简单(或者你对这方面很了解)

C/C++ code

class A
{
public:
A(int a)
{
printf("%d ",a);
}
};

int main(void)
{
printf("main ");
A c(2);
static A b(3);
return……
[/Quote]
为什么会先全局,在局部呢???
采石工 2011-10-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 yisikaipu 的回复:]

函数体外的声明语句不必是定义语句,比如extern A a;
所有的函数调用都是在函数体内,main函数与构造函数都是函数,不存在矛盾
在main执行前,触发构造函数调用的是运行时库
引用 4 楼 quarryman 的回复:

函数体外只能存在声明语句或定义语句(实际上函数体外的声明语句都是定义语句,如果没有初始化,会隐式的初始化,对于基本类型初始化为零,对于类类型则调用相应的构造函……
[/Quote]
谢谢你的回复,我明白了一些
AngusSL 2011-09-30
  • 打赏
  • 举报
回复
mark
yisikaipu 2011-09-30
  • 打赏
  • 举报
回复
函数体外的声明语句不必是定义语句,比如extern A a;
所有的函数调用都是在函数体内,main函数与构造函数都是函数,不存在矛盾
在main执行前,触发构造函数调用的是运行时库
[Quote=引用 4 楼 quarryman 的回复:]

函数体外只能存在声明语句或定义语句(实际上函数体外的声明语句都是定义语句,如果没有初始化,会隐式的初始化,对于基本类型初始化为零,对于类类型则调用相应的构造函数),不能存在表达式语句,包括函数调用语句。用下面的实验代码为证。

如前所述,函数体外不能存在函数调用语句,而在函数体外声明类对象时要调用类的构造函数,照此推理,函数体外就不能声明类对象了。而上面的例程偏偏是无误的,其实我们的编程实践中也通常在类外声明对象,并无问题。这就产生了矛盾。我也无解,姑且当做例外吧。希望大方之家解释之!

这就是我对第一道题的理解。
[/Quote]
shiningdove 2011-09-30
  • 打赏
  • 举报
回复
第二题答案 144,楼上几位已经给出结果了:
1.程序中':'的作用,如 unsigned short int a:5;表示变量a占了5个bit的空间,这样的话结构体所占的变量空间为5+5+6,暂且表示为000000|00000|00000,对应c|b|a
2.在主程序中对结构体初始化a=16,b=4,c=0,转换为二进制放到上面的空间,000000|00100|10000同样对应a|b|c
3.后面一句int i=*(short*)&test;取结构体test的地址空间,就是上面的000000|00100|10000,转换成short型,也就是144
~OVER!~
  • 打赏
  • 举报
回复
先全局 后局部 虽然全局跟static在同一个地方,但是还是有所区别
matrixcl 2011-09-30
  • 打赏
  • 举报
回复
我觉地1题答案是A没错,但没你想得简单(或者你对这方面很了解)


class A
{
public:
A(int a)
{
printf("%d ",a);
}
};

int main(void)
{
printf("main ");
A c(2);
static A b(3);
return 0;
}

A a(1);

这样答案依然是A
matrixcl 2011-09-30
  • 打赏
  • 举报
回复

struct Test
{
unsigned short int a:5;
unsigned short int b:5;
unsigned short int c:6;
};


位域
a是一个 short 的低5位,b是接下来的5位,c是再接下来的6位。 如果用的的位超过16,将在申请一个short。

haofang666777 2011-09-30
  • 打赏
  • 举报
回复
mark
haofang666777 2011-09-30
  • 打赏
  • 举报
回复
mark
xiaoyanzi521 2011-09-30
  • 打赏
  • 举报
回复
struct Test
{
unsigned short int a:5;
unsigned short int b:5;
unsigned short int c:6;
};

请问一下,这种定义是什么意思呢? 是无符号48位吗? 如果是的话 a:5 又是什么定义呢?
采石工 2011-09-30
  • 打赏
  • 举报
回复
函数体外只能存在声明语句或定义语句(实际上函数体外的声明语句都是定义语句,如果没有初始化,会隐式的初始化,对于基本类型初始化为零,对于类类型则调用相应的构造函数),不能存在表达式语句,包括函数调用语句。用下面的实验代码为证。

如下代码没问题。

#include <stdio.h>

int i;
int j=0;

int main()
{
return 0;
}


而下面代码则存在问题,编译时问题多多。

#include <stdio.h>

int i;
i++;
printf("outside of function boby.\n");

int main()
{
return 0;
}

下面的代码是正确的。

#include <stdio.h>

class A
{
public:

A(int a)
{
printf("%d\n",a);
}
A()
{
printf("out\n");
}
};

A a;
A b(1);

int main()
{
printf("in\n");
A c(2);
static A d(3);

return 0;
}


如前所述,函数体外不能存在函数调用语句,而在函数体外声明类对象时要调用类的构造函数,照此推理,函数体外就不能声明类对象了。而上面的例程偏偏是无误的,其实我们的编程实践中也通常在类外声明对象,并无问题。这就产生了矛盾。我也无解,姑且当做例外吧。希望大方之家解释之!

这就是我对第一道题的理解。
hackbuteer1 2011-09-22
  • 打赏
  • 举报
回复
感觉很奇怪啊,难道第一题考察的就是程序的顺序执行,从前到执行,输出: 1 main 2 3
感觉没有考察到什么知识点啊。。。。。
qq120848369 2011-09-22
  • 打赏
  • 举报
回复
试了下,第一题还真是A,学习了。
qq120848369 2011-09-22
  • 打赏
  • 举报
回复
B,B。

0000 0000 1001 0000

小端机器结果将是:16+128=144,选B

是不是

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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