知识点总结(6)
*p++ 自增p 还是 p 所指向的变量?
正确答案: A
先自增p
先自增p所指向的变量
和机器相关
后缀++ 和-- 操作符本质上比前缀一目操作的优先级高, 因此*p++ 和*(p++) 等价, 它自增p 并返回p 自增之前所指向的值。
要自增p 指向的值, 使用(*p)++, 如果副作用的顺序无关紧要也可以使用++*p。
若树 T 有 a 个度为 1 的结点, b 个度为 2 的结点, c 个度为 3 的结点,则该树有 个叶结点。
正确答案: D
1+2b+3c
a+2b+3c
2b+3c
1+b+2c
节点数 = 分叉树 + 1
解:设该树拥有叶子节点数为y.
a + b + c + y = a*1 + 2*b + 3*c + 1
得到: y = b + 2c +1
linux命令执行成功后会返回
正确答案: A
0
1
2
-1
linux命令执行成功后会返回0,否则返回对应的错误码
char *p =“PCGAME”;是定义初始化指针变量,指针变量的值是一个字符串.说法是否正确?
正确答案: B
正确
错误
该指针变量的值是一个字符串的首地址
下列的模板说明中,正确的有( )
正确答案: A C
template <typename T1, typename T2>
template <class T1, T2>
template <class T1, class T2>
template <typename T1; typename T2>
B中有一个没有类型说明’
D中出现分号。
int fun(int i = 1, int j = 2)
{
return (i + j);
}
则fun(3)的值为:
正确答案: A
5
4
3
2
默认参数的匹配时靠前原则,所以实参3与形参i匹配,j=2,return 5
写出下面代码的运行结果是()
class AA {
public:
int a;
static int b;
AA()
{
a = 1;
add2();
}
int add1()
{
a = a + 1;
return a;
}
int add2()
{
b = b + 1;
return b;
}
};
int AA::b = 1;
int main()
{
AA a1;
a1.add1();
a1.add2();
assert(a1.a<a1.b);
printf("%d,%d", a1.a, a1.b);
return 0;
}
正确答案: A 你的答案: B (错误)
2,3
2,2
2,1
断言错误
b为静态变量
首先b=1
AA a1调用AA构造函数首先执行a=1,此时a、b都为1
然后执行add2,此时b变为2
然后调用add1,此时a=2,b=2
然后调用add2,此时a=2,b=3
满足条件不触发断言
输出2,3
真值为-100101的数在字长为8的机器中,其补码形式为()。
正确答案: A
11011011
10011011
10110110
10110111
(-100101)原=10100101,故(-100101)补=11011011
求负数的补码
1.写出此数的绝对值的源码00100101(题目要求8位,所以前面补0) 2.按位取反11011010 3.加1 得11011011
cat -n file1file2 命令的意思是?
正确答案: B
只会把文件file1的内容输出到屏幕上。
把文件file1和file2连在一起,然后输出到屏幕上。
创建文件file1和file2
把file2的内容输出到file1中并保存
将几个文件合并为一个文件: $cat file1 file2
-n 或 --number 由 1 开始对所有输出的行数编号
上述命令即将file1和file2的文件内容连在一起然后输出到屏幕,并打印行号,file1和file2文件内容不变
For a CPU with 32-bit addresses and 32-bit integers, we have the following code:
typedef struct data_ {
int a[10];
} data_t;
typedef struct descriptor_ {
data_t *ptr;
char data[0];
} desc_t;
What is sizeof(desc_t)?
正确答案: B
40
4
8
0
data[0]的长度为零,字节为零。
在WIN32编译器下指针长度为4。总长度为4,不需要补齐。所以结构体长度为4
data[0] 长度为0 所以 所占字节是0
与alloc相反,与retain相反,与alloc配对的分别是
正确答案: B
dealloc release dealloc
dealloc release release
dealloc dealloc dealloc
release release release
alloc 分配内存 dealloc 释放内存
retain 引用计数+1 release -1
alloc 与 release 配对,MRC 时使用。
char是有符号还是无符号类型?()
正确答案: C
有符号
无符号
取决于具体实现
C++ Primer说到:
int,short,long都是signed的;
char可能是signed的,也可能是unsigned的;
下列关于C语言的函数参数说法不正确的是__________()
正确答案: B
实参可以是常量,变量或表达式
形参可以使常量,变量或表达式
在函数定义时必须指定形参的类型
形参与实参的类型应相同或赋值兼容
实参可以是常量、变量或表达式,但是形参只能是变量。
STL中的哪种结构在增加成员时可能会引起原有成员的存储位置发生改变
正确答案: D
map;
set;
list;
vector;
vector是用动态数组实现的,当容量不够时会扩容,导致存储位置变化,其他是用链表实现的,所以不会出现扩容的问题
设有程序段:
t=0;
while (printf("*")) {t++; if (t<3) break;}
下面描述正确的是()。
正确答案: B
其中循环控制表达式与0等价
其中循环控制表达式与’0’等价
其中循环控制表达式是不合法的
以上说法都不对
因print(“*”)函数调用的返回值是字符串中字符的个数,即为1。所以while
后面的条件恒为真,所以循环控制表达式与’0’是等价的。正确答案是B。
以下序列中不可能是一棵二叉查找树的后序遍历结构的是:
正确答案: B
1,2,3,4,5
3,5,1,4,2
1,2,5,4,3
5,4,3,2,1
因为是后序遍历,先左子树,后右子树,最后根节点,所以序列的最后一个是根节点;
因为是二叉查找树,所以比根节点小的都在左子树,比根节点大的都在右子树;
1、根节点是5,所有的节点都比根节点小,都在左子树上;
2、根节点是2,而其中只有1比它小,而1在中间,所以很明显不对;(错误)
3、根节点是3,其中1,2比它小在左子树上,4,5比它大在右子树上;
4、根节点是1,所有的节点都比它大,都在右子树上。
题目给出的是后续遍历的序列,那么最后一个节点必定是 根节点。
最后一个节点之前的所有节点必定是根节点的左右子树,根据二叉查找树的定义,其左子树和右子树中的节点, 是大于或者小于根节点的
选项中只有B 无法找到一个合理的划分点,来组成二叉查找树
哪些因素可能会影响到一个类的大小(多选)
正确答案: A C F
成员个数
函数个数
是否有虚函数
虚函数个数
静态变量个数
对齐方式
当C++类中有虚函数的时候,会有一个指向虚函数表(V-table)的指针,所有的虚函数都在这个表中。指针大小为4
有如下一段代码(unit16_t为2字节无符号整数,unit8_t位1字节无符号整数)
union X
{
unint16_t a;
struct Z
{
unint8_t m;
unint8_t n;
}z;
};
union X x;
x;a = 0x1234;
请问x.z.n在大字节序和小字节序机器上的值分别为多少()?
正确答案: A
0x34,0x12
0x12,0x34
0x1234,0x1234
0x1234,0
0,0x1234
最清楚的解释:0x1234
0x12:高位
0x34:低位
结构体中,先声明的是低地址,后声明的是高地址
m:低地址
n:高地址
大端:低位放在高地址:0x34---->n
小端:高位放在高地址:0x12---->n
建立自定义函数的目的之一是()
正确答案: B
提高程序的执行效率
提高程序的可读性
减少程序的篇幅
减少程序文件所占内存
建立自定义函数,调用时只需要明白函数的功能即可,提高了程序的可读性。
效率而言,调用函数往往会导致效率下降。
多次调用可能减少篇幅,一次调用的反而会增加。
肯定不会减少内存。
如下程序
void main()
{
float a = 1;
cout << boolalpha << ((int)a == (int &)a);
float b = 0;
cout << boolalpha << ((int)b == (int &)b);
}
该程序输出结果为
正确答案: D
truetrue
falsefalse
truefalse
falsetrue
1.
在C程序中,可把整型数以二进制形式存放到文件中的函数是()。
正确答案: C
fprintf函数
fread函数
fwrite函数
fputc函数
fprintf函数只能以字符串的形式写入到文件中;fread函数则是从文件中读数
据,而不是写数据;fputc函数是以字符的形式写到文件中:而fwrite函数则是将某数以其
机器数的形式写入到文件中。故选择答案是C
C++类体系中,不能被派生类继承的有?
正确答案: A B D
构造函数
静态成员函数
非静态成员函数
赋值操作函数
简而言之,缺省构造函数,拷贝构造函数,拷贝赋值函数,以及析构函数这四种成员函数被称作特殊的成员函数。这4种成员函数不能被继承
以下叙述中正确的是()
正确答案: A
只要适当地修改代码,就可以将do-while与while相互转换
对于"for(表达式1;表达式2;表达式3) 循环体"首先要计算表达式2的值,以便决定是否开始循环
对于"for(表达式1;表达式2;表达式3) 循环体",只在个别情况下才能转换成while语句
如果根据算法需要使用无限循环(即通常所称的"死循环") ,则只能使用while语句
B 选项中, for 语句中需要先求解先求解表达式 1 ; C 选项中, for 语句使用最为灵活,它完全可以取代 while 语句; D 选项中,对于死循环,也可以使用 for 语句。因此 A 选项正确。