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

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有点疑问。


B怎么可能对呢?
想一想,p可以对其赋值,str能吗?
p是指针变量,str是一个指针。


  1. unsigned int和int运算,加减乘除也好,小于大于也好,都是int转unsigned int。转换方式是底层数据不变,改变解释方式。(csapp第二章)

  2. b是错的 str虽然能当指针用,但在&和sizeof两个操作符下它是数组 所以说不能说完全相同
    c也是错的 str的大小是20 但是字符串长度是5 数组大小是定义中的大小,但是字符串长度是strlen结果中的长度

【热门文章】
【热门文章】