printf("%d, %d, %d\n")

suojunqi 2009-11-03 05:34:33
问两道面试题
1.
printf("%d, %d, %d\n");
一道面试题,打印出什么东西,为什么啊?这三个数字式固定的吗?

2.
char e[] = "suojunqi";
cout<<sizeof(e)<<endl; //是9,自动补了一个0

char *n[] = {"ab", "cd", "ef", "gh"};
cout<<sizeof(n)<<endl; //是16,为什么不补呢?

很奇怪,数组到底会补什么呢?有时候补,有时候不补?

3.
char m[10] = "suojunqi";
比如这个数组,只有8个字符,会补两个0吗?(会的)
...全文
296 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
simes34 2009-11-04
  • 打赏
  • 举报
回复
3个是char m[10] = "suojunqi"; 声名时就在内存中确定大小事10字节了。所以sizeof(m)=10
zhaixingchen 2009-11-03
  • 打赏
  • 举报
回复
1。不确定
2.3.不是补0不补0的问题,第二个数组里面盛放的是指针,一个指针4个字节,sizeof(n)是求数组的大小,不是长度。
huqinglu123 2009-11-03
  • 打赏
  • 举报
回复
第二个是指针数组,每个指针分配4个字节,所以是16,跟补0无关
第三个:也不是补0的原因,数组初始化的时候char m[10] = "suojunqi"; 后面没有的自动赋值为0
对于字符数组,它是以'\0'为结尾标识的,所以每个字符数组最后一位都为\0,这是系统自己加的,
所以sizeof()得时候会加上\0,而strlen()的时候就不会加上\0



zhouyongku 2009-11-03
  • 打赏
  • 举报
回复
1、输出是随机数
2、只有字符类型数组才会自动补0,并且以0作为字符串结束标志。
3、char m[10] = "suojunqi";很显然紧接着的后一个数当然是0,至于后面的数就不清楚了。
4、如果写 char m[8]="suojunqi"系统就会提示错误。
cnStreamlet 2009-11-03
  • 打赏
  • 举报
回复
不是数组补0,是双引号表示字符串的时候补0

To 6楼7楼
这些 0 不是补的,是因为 VC 会把数组初始化为 0。最后一个字符后面的 0 是补的(尽管补之前也是0)
jzd8000 2009-11-03
  • 打赏
  • 举报
回复
第二个调试了一下,n【0】。。n【3】是四个不确定的地址(不一定连续)
jackyjkchen 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 suojunqi 的回复:]
第三个我试了一下,是补两个0啊,
[/Quote]

试试char str[10] = "12";这就成了补8个0了……
suojunqi 2009-11-03
  • 打赏
  • 举报
回复
第三个我试了一下,是补两个0啊,
jackyjkchen 2009-11-03
  • 打赏
  • 举报
回复
2.改一下,char[][]是两个零区分,char *[]是看有几个指针,一个指针4字节
jzd8000 2009-11-03
  • 打赏
  • 举报
回复
1,不确定。
2,e是字符串数组,n不是(是数组的数组)
3,第九个([8])一定会补0,第十个应该不确定(个人认为)
jackyjkchen 2009-11-03
  • 打赏
  • 举报
回复
1.看栈内容,这么回答就行了

2.char *n[]以两个零来区分不同组,在VC里看下内存一目了然

3.sizeof数组以数组长度为结果,这不是补零的问题,char m[10] = ""; 的结果也是10
xingzhe2001 2009-11-03
  • 打赏
  • 举报
回复
1.可能打印栈顶的3个数,不固定
2.n是个指针数组,所以是16,每个n[i]的末尾会补0
3。会补1个0
ztenv 版主 2009-11-03
  • 打赏
  • 举报
回复
基础问题呀,看看sizeof()到底是干什么的,对比一下strlen()的区别吧,

64,691

社区成员

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

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