两道笔试题,大家帮忙看一下!

benbenpeng520 2008-10-29 11:28:40
这两道题有点儿弄不明白,请大家帮忙解答一下!
1.求解:
int inline func1(int x,int y) {return 2*x+y;}
#define func2(x,y) 2*x+y
#define func3(x,y) func2(x,y)*3+func1(x,y)*2
int result=func3(3,1);
result的值是:

2.程序的输出结果是?
void func(char* str) {str=new char[20];strcpy(str,”Hello world\n”);}
char str[20]=”Good Morning”;
func (str);
print(“%s”,str);
输出为:
...全文
252 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lq651659889 2008-10-29
  • 打赏
  • 举报
回复
关注
huwu_china 2008-10-29
  • 打赏
  • 举报
回复
23: 宏是直接的文本替换了,2x + y * 3 + (2x + y) * 2

Good morning: func里修改str指针本身,就是str是传值了。所以结果不变。
cyj626 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiangxuf 的回复:]
第一个应该是23 第二个是Good Morning
[/Quote]up
太乙 2008-10-29
  • 打赏
  • 举报
回复


2.程序的输出结果是?
void func(char* str) {str=new char[20];strcpy(str,”Hello world\n”);}
char str[20]=”Good Morning”;
func (str);
print(“%s”,str);
输出为:

穿过去的是一个指针,just一个指针,而不是指针的引用,不影响str!
太乙 2008-10-29
  • 打赏
  • 举报
回复


1.求解:
int inline func1(int x,int y) {return 2*x+y;}
#define func2(x,y) 2*x+y
#define func3(x,y) func2(x,y)*3+func1(x,y)*2
int result=func3(3,1);
result的值是:


展开:
result = func2(3,1)*3+func1(3,1)*2

再展开:

result = 2*3+1*3+(2*3+1)*2 = 6+3+14 = 23




xiangxuf 2008-10-29
  • 打赏
  • 举报
回复
第一个应该是23 第二个是Good Morning
caixingxin 2008-10-29
  • 打赏
  • 举报
回复
自己试一下不就知道了。。
xxgamexx 2008-10-29
  • 打赏
  • 举报
回复
是的 如LS所说

形参指向了 "hello world" 而这个字符串存储在堆上


试试这个:


void func(char* str)
{
strcpy(str,”Hello world\n”);
}


另外
对独行大哥的解释 我有点异意
这里不影响str的原因是:他这里只是new出了一部分堆空间。对堆空间地址进行了操作,而没有直接对原来指向main函数str变量地址操作吧~
jia_xiaoxin 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 benbenpeng520 的帖子:]

2.程序的输出结果是?
void func(char* str) {str=new char[20];strcpy(str,”Hello world\n”);}
char str[20]=”Good Morning”;
func (str);
print(“%s”…
[/Quote]

输出为:Good Morning

这道题主要是为了考形参和实参的区别
函数void func(char* str)中的str是形参他是当调用函数时在函数部建立的一个临时的、局部的变量
而char str[20]中的str是实参,
实参和形参在函数的入口处都指向了"Good Morning"字符串,但是在函数的内部,形参指向了"Hello world"字符串,但是实参依然指向的是"Good Morning"字符串;
jia_xiaoxin 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用楼主 benbenpeng520 的帖子:]

1.求解:
int inline func1(int x,int y) {return 2*x+y;}
#define func2(x,y) 2*x+y
#define func3(x,y) func2(x,y)*3+func1(x,y)*2
int result=func3(3,1);
result的值是:

[/Quote]

result的值是: 23

这道题主要是为了考内联函数和宏的区别

将func3(3,1)宏替换即为:
func3(3,1) = 2*3+1*3+func1(3,1)*2
而func1(3,1)为2*3+1 = 7;

所以func3(3,1) = 2*3+1*3+7*2 = 23

xxgamexx 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hqin6 的回复:]
C/C++ code

2.程序的输出结果是?
void func(char* str)
{
str=new char[20];
strcpy(str,”Hello world\n”);
}
char str[20]=”Good Morning”;
func (str);
print(“%s”,str);
输出为:

穿过去的是一个指针,just一个指针,而不是指针的引用,不影响str!
[/Quote]

对独行大哥的解释 我有点异意

这里不影响str的原因是:他这里只是new出了一部分堆空间。对堆空间地址进行了操作,[color=#FF0000]而没有直接对原来指向main函数str变量地址操作吧~ color]
如果改成

void func(char* str)
{
strcpy(str,”Hello world\n”);
}

测试证明这个影响了str的值。

mikebzj 2008-10-29
  • 打赏
  • 举报
回复
Mark 学习
xxgamexx 2008-10-29
  • 打赏
  • 举报
回复
版本5:


char &func()
{
char str;
str='f';
return str;
}
void main()
{
char str='m';
str=func (); //返回引用
print("%s",str);
}



xxgamexx 2008-10-29
  • 打赏
  • 举报
回复
这里用char 可能更清楚些

版本一:

char func()
{
char str;
str='f';
return str;
}
void main()
{
char str='m';
str=func (); //把局部变量的值传回
print("%s",str);
}

版本二:

void func(char* str)
{
str=new char;
*str='f';
}
void main()
{
char str='m';
func (&str); //把地址传入
print("%s",str);

}


版本三:

char func(char* str)
{
str=new char;
str='f';
return str;
}
void main()
{
char str='m';
str=func (&str); //地址传入同时返回
print("%s",str);
delete []str;
}

版本四:


char *func()//返回局部变量,可能会导致严重错误!
{
char *str;
str=new char;
str='f';
return str;
}
void main()
{
char str='m';
str=*func();
print("%s",str);
delete []str;
}


我只列出了4种版本,大家补充,看看每个版本的差异吧!
liveforlov 2008-10-29
  • 打赏
  • 举报
回复
的确,这些基本的很,牛人还是要数据结构之类的牛,哎
Amy-112 2008-10-29
  • 打赏
  • 举报
回复
23

Good Morning
lunarfan 2008-10-29
  • 打赏
  • 举报
回复
现在的公司~水平低的看不上,水平高的自己还差一截,唉~~~~
lunarfan 2008-10-29
  • 打赏
  • 举报
回复
2.程序的输出结果是?
void func(char* str) {str=new char[20];strcpy(str,”Hello world\n”);}
char str[20]=”Good Morning”;
func (str);
print(“%s”,str);
输出为:Good Morning
void func(char* str)str在运行完func就出stack了。
print(“%s”,str); 这里的str是char str[20]=”Good Morning”;
另外有内存泄漏的问题。

lunarfan 2008-10-29
  • 打赏
  • 举报
回复
第一题:
int result=2*3+1*3+7*2;
result的值是:6+3+14=23

65,211

社区成员

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

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