开发者社区> 问答> 正文

C语言数据类型转换及数组和指针区别

今天笔试的几道题,有很大得疑问,自己想不明白的在此求助各位。
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有点疑问。

展开
收起
a123456678 2016-06-08 21:35:32 2540 0
1 条回答
写回答
取消 提交回答
  • 码农|Coder| Pythonista
    • unsigned int和int运算,加减乘除也好,小于大于也好,都是int转unsigned int。转换方式是底层数据不变,改变解释方式。(csapp第二章)
    • b是错的 str虽然能当指针用,但在&和sizeof两个操作符下它是数组 所以说不能说完全相同
      c也是错的 str的大小是20 但是字符串长度是5 数组大小是定义中的大小,但是字符串长度是strlen结果中的长度
    2019-07-17 19:32:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载