练习4、下面这段代码的结果是什么?
int main() { int i = -20; unsigned int j = 10; printf("%d\n", i + j); return 0; }
结果展示:
分析:
练习5、下面这段代码的结果是什么?
#include<stdio.h> int main() { unsigned int i = 0; for (i = 9; i >= 0; i--) { printf("%u\n", i); } return 0; }
结果:死循环
分析:
unsigned int i 为无符号整型,恒>=0,循环语句的判断条件恒成立。死循环
为了能更好的观察到代码结果的变化,我们加上Sleep(1000),每打印一行都暂停1000ms = 1s。
#include<stdio.h> #include<Windows.h> int main() { unsigned int i = 0; for (i = 9; i >= 0; i--) { printf("%u\n", i); Sleep(1000); } return 0; }
练习6、下面这段代码的结果是什么?
#include<stdio.h> #include<string.h> int main() { char arr[1000]; int i; for (i = 0; i < 1000; i++) { arr[i] = -1 - i; } printf("%d", strlen(arr)); return 0; }
结果:分析:数组 arr 是 char类型,char类型的取值范围为 - 128 — 127 用strlen函数求字符串的长度,
strlen会在找到\0后停止计算长度,\0的ASCII码值为0 ,
arr[0] = -1, 从 - 1 —> 0要经过 - 1, - 2, - 3,…… - 128, 127, 126……3, 2, 1, 0
128 + 128 = 256个数字,将最后一位的\0排除(strlen在计算字符串长度的时候,遇到\0停止且不计算\0的长度),所以最后的结果是255
字符串是借助于字符型一维数组来存放的,'\0’ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志
所以数字0跟’\0’的效果一样**
练习7、下面这段代码的结果是什么?
#include<stdio.h> unsigned char i = 0; int main() { for (i = 0; i <= 255; i++) { printf("hello world\n"); } return 0; }
结果:死循环打印
分析:
unsigned char 无符号数字取值范围:0~255,255+1=0
i 恒小于等于255
网络异常,图片无法展示
|