1.转义字符
【解释】首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' y \\ \b ou \n”中的转义
字符(带下划线的部分)共有6个,其中’\b’是退格符,输出时将光标往左边回退一个位置,
‘\’’为单引号字符,’\\’为\字符,’\n’为回车换行符。所以显示的结果为C。
2.
解释】因p是指针变量,在scanf中不能再使用&p或*p来接收键盘的输入值,应直
接用p即可,所以答案A和B都是错误的;而C中*p=n;是“野指针”赋值,因p未指向
某一内存单元,所以答案C也是错误的;答案D中是将变量n的地址给指针变量p,然后
再把m的值赋值给p所指向的内存单元,也就是赋值给n,是正确的。所以正确答案是D
如果用scanf("%d", p),运行时也会出现段错误,因为p是一个野指针,还没有地址,不能用来存放,所以要对野指针使用的话就需要要想D中一样先给P一个地址
3.程序编译过程
.
4.短除法求二进制数
例如要把41转化成二进制的:
2∟41···余1···最低位
2∟20··· 0
2∟10··· 0
2∟5 ··· 1
2∟2 ··· 0
2∟1 ··· 1···最高位
0
结果就等于101001
例2:把小数0.375转化成二进制
0.357*2=0.75 取0
0.75*2 =1.5 取1
0.5*2 =1.0 取1
结果为0.011
5.二维数组地址
在二维数组中a[1]表示的是a[1][0]的地址,数组在内存中连续存储,所以a[1]+1表示的是a[1][1]的地址,所以D可以取得正确的值;
指针操作*(a+1)与a[1]等价,所以B也可以取得正确的值;
二维数组在内存中是行优先存储的,所以A中a[0][0]的地址加5可以取得正确值;
C选项错误,应改为*(&a[1][0]+1),因为a[1]就表示a[1][0]的地址。
6.运算符优先级
单目运算符 >算术运算符 >移位 >比较 >按位 >逻辑 >三目运算符 >赋值运算符
7.值传递与引用传递
最后对值传递与引用传递作一个比较:
1. 在函数定义格式上有不同:
值传递在定义处是:Exchg1(int x, int y);
引用传递在这义处是:Exchg1(int &x, int &y);
2. 调用时有相同的格式:
值传递:Exchg1(a,b);
引用传递:Exchg3(a,b);
3. 功能上是不同的:
值传递的函数里操作的不是a,b变量本身,只是将a,b值赋给了x,y函数里操作的只是x,y变量而不是a,b,显示a,b的值不会被Exchg1函数所修改。
引用传递Exchg3(a,b)函数里是用a,b分别代替了x,y。函数里操作的是a,b。
8.
>是转义字符">",97>98错误,所以C正确。
A 选项中, '\0' 表示结束; B 选项中,字符常量是用单引号括起来的一个字符; D 选项中, '\"' 是双引号符。因此 C 选项正确。
9.正数的原码补码相同,负数的原码为对应正数的原码的符号位取反,即符号位为1,之后的各位都相等。
计算机运算时是以补码形式运算的
char ch=127;
ch++;
ch的值是多少?它的值是-128,读者可以上机验证一下。