考点:类型隐式转换
答案:>6
解释:当表达式中存在有符号数和无符号数时,所有操作数都自动转换为无符号数
a = 6 = (0000 0000 0000 0000 0000 0000 0000 0110)2 以32位系统为例
b = -20 = (1000 0000 0000 0000 0000 0000 0001 0100)2
b的补码 = (1111 1111 1111 1111 1111 1111 1110 1100)2 b=-20转换为无符号数得到的数,是一个非常大的整数
若题目输出部分改成:
(a+b>6) ? printf(">6") : printf("<=6");
输出结果相同
考点:读越界,写越界
答案:段错误
strcpy( char *str1,char *str2)的工作原理是,扫描str2指向的内存,逐个字符赋给s1所指向的内存,直到碰到'\0'。
因为在这种赋值方式下,str1={a,a,a,a,a,a,a,a,a,a},没有'\0',所以赋值不能结束,所以使用strcpy函数赋值时字节数具有不确定性,不知道在末尾会赋什么值。
考点:static、变量
答案:i = 10 ;j = 1
解释:
1、被static修饰的变量存储在静态数据区,当函数运行结束后,该变量不会被释放,函数在下一次被运行时依然可以使用其值
2、静态变量只被初始化一次,函数下次运行会直接跳过初始化(static int i = 0 // )
考点:数组和指针的区别,sizeof
答案:
(1)4 (sizeof(p)的意思是,指针p占4个字节)
(2)4 (sizeof(*p)的意思是,指针p指向的int类型占4个字节)
(3)400 (sizeof(a)的意思是,数组a一共占4*100=400个字节)
(4)4 (a[100]是一个int类型的元素,占4个字节)感觉a[100]这样是不太对的啊???越界了吧??
(5)4 (sizeof(&a)中,a代表数组的首元素,&a表示首元素的地址,地址占4个字节)
(6)4 (a[0]是数组的第一个元素,地址占4个字节)
(7)4 (当数组作为函数的参数进行传递时,会自动变为同类型的指针sizeof(b) ---> sizof(int *),指针占4个字节)
考点:字符串结束符,char 的范围
答案:255
解析:a[0] = -1; a[1] = -2 ; a[2] = -3 ... a[127] = -128 ; a[128] = 127 ; a[129] = 126 ... a[255] = 0
考点:const
答案:
(1)p的指向可改,p指向的内容不可改(const修饰的是*p)
(2)p的指向可改,p指向的内容不可改(const修饰的是*p)
(3)p的指向不可改,p指向的内容可改(const修饰的是p)
(4)p的指向不可改,p指向的内容也不可改(const既修饰了*p也修饰了p)