LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: zywwzy

我今天为招聘新员工出的C语言考题

[复制链接]
发表于 2003-6-19 08:55:44 | 显示全部楼层
佩服
发表于 2003-6-19 16:55:36 | 显示全部楼层
我已经搜索出与堆栈有关的信息。在纸上也画过,应该是理解的了。
我还漏看了三个变量的定义。谢谢楼主提醒了。
但第一个问题我还是不懂啊。
如果说char str_val[]="32\n"。占用的内存空间是四个字节的话,那应该是'3','2','\n','\0'吧!要不哪来四个字节。如果这样的话,执行var2的赋值后,应该是这样的:
var3:__【字节1】
_______【字节2】
_______【字节3】
_______【字节4】
var2:__【字节1】=======32  ‘3’==99
var1:__【字节1】=24===0    ‘2’==98
_______【字节2】=0====0    ‘\n’
_______【字节3】=0====0
_______【字节4】=0
没有用atoi。为什么会自动把整形数转换成字符了呢?
发表于 2003-6-19 17:08:05 | 显示全部楼层

我再说说我对第一个问题的理解。大家看看对不对。

当内存的生长方向与堆栈生长方向相反的时候。假设内存生长方向向上。
当申请一个局部变量的时候,堆栈就生长了一段空间,这段空间长度由局部变量决定的。
当定义了var1,var2,var3后,堆栈为:
var1:__【字节1】//栈底
_______【字节2】
_______【字节3】
_______【字节4】
var2:__【字节1】
var3:__【字节1】
_______【字节2】
_______【字节3】
_______【字节4】//栈顶
在内存中的排列是跟堆栈一样的,但内存是向上生长,堆栈是向下生长,来一下就压入一个。当对var2赋值的时候,先对var2字节1赋值,由于内存生长方向向上,接下来的是var1的字节4.这时就把var1给覆盖了。
当内存生长方向与堆栈方向相同的时候,虽然对var2赋值的时候,会把var3覆盖掉。但对var3赋值的时候,又改回来了。
如果这样是正确的话,那这只是和堆栈有关吧?与缓冲区还有关系吗?
发表于 2003-6-19 18:17:12 | 显示全部楼层
0100还没有掌握sscanf,你想一想scanf就行了,scanf("%d", &i);输入32回车,scanf就把输入的字符串"32"转换成整数(%d)32,并赋给i,sscanf中的第一个参数就等于你在使用scanf时的输入,所以赋的值是32,而不是'3''2''\n'
发表于 2003-6-19 18:26:15 | 显示全部楼层
"32\n"被sscanf()按格式读取后就成为整数。转换成二进制就是100000,才占一个字节。其余3个字节都空作呢。
发表于 2003-6-19 18:48:13 | 显示全部楼层
出这种题有故意刁难的嫌疑;)
当然也要看你们公司的性质。

我一般从GRE上摘几道题,一箭双雕
发表于 2003-6-19 19:43:07 | 显示全部楼层
最初由 libinary 发表
0100还没有掌握sscanf,你想一想scanf就行了,scanf("%d", &i);输入32回车,scanf就把输入的字符串"32"转换成整数(%d)32,并赋给i,sscanf中的第一个参数就等于你在使用scanf时的输入,所以赋的值是32,而不是'3''2''\n'

其实我也经常用scanf。
我来说说我的看法,你看对不对。
scanf是用来从缓冲区以第一个参数的形式将一个字符输入到第二个参数(地址)里。要是缓冲区为空则会等待输入一个字符,如果不空的话,是不会等待输入一个字符的。而是直接赋值过去了。
为什么我会犯那样的错误呢?因为我看到32\n两端有括号。
那些看来比较简单的事情,即使能够正常使用,也是不等于完全理解啊。"32\n"不就相当于我输入32再输入一个回车吗?
谢谢libinary的指导。要是你不说,我还没发现呢?libinary思考问题真的很严谨啊。
发表于 2003-6-19 20:44:53 | 显示全部楼层
思考严谨是必须的,否则程序就出不来。
发表于 2003-6-21 10:31:21 | 显示全部楼层
要是我的话也不会考虑到堆栈。
初看这道题目只是那个char的变量有点可疑,但不会想到就是这里要拐个弯。
发表于 2003-6-21 13:10:46 | 显示全部楼层
学习编程要多写多练的,要重视基础。libinary兄说的虽然只是几句话,但却是功底扎实的表现。很是羡慕的说。。。:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表