面试时遇到的一个问题,我都快疯了!!!

_牧马人_ 2011-08-03 06:05:39
昨天参加了一个C语言的面试。
首先,面试官问了我一些关于sizeof的问题,然后很幼稚的问我“sizeof(int)占用几个字节?”我自然很得意,就这水平,我毫不犹豫的答出了,“在32位机上,int类型占用4个字节的内存空间。"
最可怕的到来了。他笑眯眯的问我,“那为什么不是2个字节或8个字节,一定是有原因的,你解释一下?”
神呐,都一次碰到这么怪的问题,那位高手帮帮我啊!
谢谢了!!
...全文
527 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
等待升级 2011-08-27
  • 打赏
  • 举报
回复
郁闷,我在6楼就给出了答案

竟然一分也没给
mzy1984 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ytfire 的回复:]
32位机,即32根地址总线,故有32位寻址空间,即一个机器字长32位(4字节)。
字长是一个总线周期内一次所取的位数。
PC机可以通过编程的方法来处理任意大小的数字,但数字越大,PC机就要花越长的时间来计算。PC机在一次操作中能处理的最大数字是由PC机的字长确定的。

所以定义int时,考虑即要保证速度,又要保证位数在一般情况下够用。故,32位机选用一个字长(即4字节),来保证速度。
对……
[/Quote]

学习了
绿野耕夫 2011-08-04
  • 打赏
  • 举报
回复
因为,int占一个机器字长,而这是32位机,所以就4字节了。
gz_qmc 2011-08-04
  • 打赏
  • 举报
回复
24楼的理解就是我的意思

当然,我也首先肯定出这个题目的面试官是个SB
luckymini 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gz_qmc 的回复:]
大哥,人家是问里sizeof(int)是占几个字节
不是问你int占几个字节

sizeof(...);不管扩号里是啥,最后都计算出一个数
这个数的类型是size_t

而size_t的定义是
typedef unsigned int size_t

所以32位机器的sizeof(...)占四字节
[/Quote]

有道理
shelley_xjrs 2011-08-04
  • 打赏
  • 举报
回复
提这种问题的人一定是傻逼,多问问工作经验比问那么多小的细节好,不会的可以问百度吗
那个人是个傻逼
勤奋的小游侠 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gz_qmc 的回复:]
大哥,人家是问里sizeof(int)是占几个字节
不是问你int占几个字节

sizeof(...);不管扩号里是啥,最后都计算出一个数
这个数的类型是size_t

而size_t的定义是
typedef unsigned int size_t

所以32位机器的sizeof(...)占四字节
[/Quote]
我只对这个回复表示有点建设性.
是问sizeof(int)是多少个字节,而不是问int是多少个字节.
是这样理解吗?sizeof(sizeof(char))==sizeof(sizeof(int))==4
AnYidan 2011-08-04
  • 打赏
  • 举报
回复
问他:老板规定的,你有什么意见?
AndyZhang 2011-08-04
  • 打赏
  • 举报
回复
这么一说,基本上明白了,还是人多力量大啊。
赵4老师 2011-08-04
  • 打赏
  • 举报
回复
对80x86 CPU而言,eax寄存器是32位的,编译器也参照这个。
  • 打赏
  • 举报
回复
估计你的回答吓到他了。(碰到一个懂行的)

编译器规定
孤舟 2011-08-04
  • 打赏
  • 举报
回复
其实 他只是想考 一个寄存器 字长对齐
ytfire 2011-08-04
  • 打赏
  • 举报
回复
32位机,即32根地址总线,故有32位寻址空间,即一个机器字长32位(4字节)。
字长是一个总线周期内一次所取的位数。
PC机可以通过编程的方法来处理任意大小的数字,但数字越大,PC机就要花越长的时间来计算。PC机在一次操作中能处理的最大数字是由PC机的字长确定的。

所以定义int时,考虑即要保证速度,又要保证位数在一般情况下够用。故,32位机选用一个字长(即4字节),来保证速度。
对于64位机,多数情况4字节足够处理,故一般也定义一个int4字节。
war10811 2011-08-04
  • 打赏
  • 举报
回复
直接回答不知道,虚心请教呗
showjim 2011-08-04
  • 打赏
  • 举报
回复
CPU的发展历史决定了编译器参数的历史
awsqsh 2011-08-04
  • 打赏
  • 举报
回复
牛人才提得出这种问题
chihchao 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gz_qmc 的回复:]

大哥,人家是问里sizeof(int)是占几个字节
不是问你int占几个字节

sizeof(...);不管扩号里是啥,最后都计算出一个数
这个数的类型是size_t

而size_t的定义是
typedef unsigned int size_t

所以32位机器的sizeof(...)占四字节
[/Quote]
嗯 有道理 否则问int几字节得了
易小星 2011-08-04
  • 打赏
  • 举报
回复
int型属于算术类型,算术类型的存储空间依机器而定,这里的存储空间是指用来表示该类型的二进制位(bit)数,int型最小为16位存储空间。
int类型占一个机器字长,在16位机是占16位,32位机占的就是32位喽。
x2x2x2 2011-08-04
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ytfire 的回复:]
32位机,即32根地址总线,故有32位寻址空间,即一个机器字长32位(4字节)。
字长是一个总线周期内一次所取的位数。
PC机可以通过编程的方法来处理任意大小的数字,但数字越大,PC机就要花越长的时间来计算。PC机在一次操作中能处理的最大数字是由PC机的字长确定的。

所以定义int时,考虑即要保证速度,又要保证位数在一般情况下够用。故,32位机选用一个字长(即4字节),来保证速度。
对……
[/Quote]
同意
shenyi0106 2011-08-04
  • 打赏
  • 举报
回复
我觉得你应该反问一下那个面试的:
1+1=?
如果他说2,你在问:为什么等于2?不就结了……
加载更多回复(13)

69,379

社区成员

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

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