今天笔试的几道题,有很大得疑问,自己想不明白的在此求助各位。
1.如下程序输出什么
int main()
{
unsigned int a=6;
int b=-20;
(a+b<=6)?puts("<=6"):((a+b)<14? puts("<14"):((a+b<21)? puts("<21"):puts(">21")));
return 0;
}
这个题着实让我困惑,在考场上我想既然出这道题肯定输出>21,要不然不会出这个题,可是真的不明白为什么,a+b难道不是-14吗?刚在电脑上运行了下,果然是a+b
第一题,我想不明白的是,如果
2.设有如下定义和语句
char str[20]="maipu",*p;
p=str;
则下列叙述中正确的是:
A *p与str[0]的值相同
B str与p的类型完全相同
C str数组长度和p所指向的字符串长度相等
D 数组str中存放的内容和指针变量p中存放的内容相同
这个题我在考场选得AB,D肯定不对,指针变量p存的是地址,C有点疑问。
unsigned int和int运算,加减乘除也好,小于大于也好,都是int转unsigned int。转换方式是底层数据不变,改变解释方式。(csapp第二章)
b是错的 str虽然能当指针用,但在&和sizeof两个操作符下它是数组 所以说不能说完全相同
c也是错的 str的大小是20 但是字符串长度是5 数组大小是定义中的大小,但是字符串长度是strlen结果中的长度