面试题笔记(二)

1.转义字符

【解释】首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' \\ \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,读者可以上机验证一下。

猜你喜欢

转载自blog.csdn.net/cb673335723/article/details/81127188
今日推荐