遇到两个面试题,请教一下!

wang_qiao_ying 2010-05-27 03:42:34
int main()

{

int i = 3;

int j=0;

j = sizeof(++i+ ++i);

printf("i=%d j=%d",i,j);

return 0;

}

对运行结果i=3,不太理解,请高人帮忙分析一下^_^


2.指出下边程序的问题:



文件A



/*定义全局变量*/



UCHAR str_aaaa[12];





/*文件B*/



#include "string.h"



extern str_aaaa[12];[h2]

void main(void)

{

UCHAR *bbbb="HELLO WORLD!";

UCHAR i;



for(i=0;i<=11;i++)

{

str_aaaa[i]=0;

}

strncpy(str_aaaa,bbbb,12);

printf("the value is %s",aaaa);



}

...全文
147 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gundamy 2010-05-27
  • 打赏
  • 举报
回复
学习了,以前还没注意过sizeof
qq120848369 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 delphiwcdj 的回复:]
2 结尾没有终止符\0,输出是乱码
[/Quote]

求楼上艾薇儿照片出处!
qq120848369 2010-05-27
  • 打赏
  • 举报
回复
第二个虽然运行没错,但是内存跑到别人那里了,估计公司看重的就是这个细节吧.
delphiwcdj 2010-05-27
  • 打赏
  • 举报
回复
2 结尾没有终止符\0,输出是乱码
qq120848369 2010-05-27
  • 打赏
  • 举报
回复
现在应该很明确了.

第一个问题是因为sizeof()
第二个问题是因为'\0'
想你的我们 2010-05-27
  • 打赏
  • 举报
回复
第一个已经说过了。
第二个:
extern str_aaaa[12];[h2]
[h2]是什么?
extern char str_aaa[12];

printf("the value is %s",aaaa);笔误

最后就算写对了。printf也是有问题,因为已经越界了。没有终止符\0

另外要#include <stdio.h>
zrp_1984 2010-05-27
  • 打赏
  • 举报
回复
mark
yuanzhang198711 2010-05-27
  • 打赏
  • 举报
回复
sizeof的使用方法
  1、用于数据类型

  sizeof使用形式:sizeof(type)

  数据类型必须用括号括住。如sizeof(int)。

  2、用于变量

  sizeof使用形式:sizeof(var_name)或sizeof var_name

  变量名可以不用括号括住。如sizeof (var_name),sizeof var_name等都是正确形式。带括号的用法更普遍,大多数程序员采用这种形式。

  注意:sizeof操作符不能用于函数类型,不完全类型或位字段。不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。

  如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。

摘自:http://www.softhouse.com.cn/news/show/1660.html
fireyou 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gigglesun 的回复:]
printf("the value is %s",aaaa);--->str_aaaa
[/Quote]

这个很明显
wjling2009 2010-05-27
  • 打赏
  • 举报
回复
MSDN
The operand to sizeof can be one of the following:

A type name. To use sizeof with a type name, the name must be enclosed in parentheses.

An expression. When used with an expression, sizeof can be specified with or without the parentheses. The expression is not evaluated.

第二个问题,str_aaaa无法存储'\0',输出时会向其内存之后查找该标志
b_duan 2010-05-27
  • 打赏
  • 举报
回复
sizeof 是在编译阶段进行的,他只关心,变量的类型。也就是说运行时,++i+++i是不会计算的吧。
ithiker 2010-05-27
  • 打赏
  • 举报
回复
printf("the value is %s",aaaa);--->str_aaaa
nuist320 2010-05-27
  • 打赏
  • 举报
回复
第一个 sizeof 是在编译的时候 就已经算出来了,所以你在里面做的操作 实际上是没执行!!一次i的值不会变
ithiker 2010-05-27
  • 打赏
  • 举报
回复
sizeof算的是类型的长度,只判断表达式值的类型,不计算表达式~

69,374

社区成员

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

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