c++笔记特训篇

100 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第N天,点击查看活动详情 选择题 💦第一题 有以下程序

#include #include using namespace std;

int main(){ int m=0123, n=123; printf("%o %o\n", m, n); return 0; } 1 2 3 4 5 6 7 8 9 程序运行后的输出结果是()

A 0123 0173 B 0123 173 C 123 173 D 173 173

这道题主要是对进制位的考验

m原本就是八进制,所以%o打印还是123,0是不需要打印的,n是十进制,转换八进制即123不断除8,直到商为0;

所以这道题的答案选C

💦第二题 以下哪个选项一定可以将flag的第二个bit置0()

A flag&=~2 B flag|=2 C flag^=2 D flag>>=2

这道题主要是考验按位运算,并且是在比特位上计算的

我们假设给falg一个值,看看如何可以将第二个比特位置0,且题目的意识是只变第二个比特位,其他位不变

这道题的答案是A

💦第三题 请声明一个指针,其所指向的内存地址不能改变,但内存中的值可以被改变。

A const int const *x = &y; B int * const x = &y; C const int *x = &y; D int const *x = &y; E const int * const x = &y; 1 2 3 4 5 这里有const,我们来了解两个概念:

常量指针:指针所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发生改变。 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值可以发生改变,可以通过指针解引用改变指针所指空间的值。 区分:const *的相对位置

const 在 * 的左边,常量指针 const 在 * 的右边,指针常量

这道题的答案是B

💦第四题 以下C语言指令:

int a[5] = {1,3,5,7,9}; int p = (int )(&a+1); printf(“%d,%d”,(a+1),(p-1)); 1 2 3 运行结果是什么?

A 2,1 B 3,1 C 3,9 D 运行时崩溃

这道题主要是对指针以及数组的考验,在前两天的笔试强训中也有类似的题目

这道题的答案选C

💦第五题 二维数组X按行顺序存储,其中每个元素占1个存储单元。若X[4][4]的存储地址为Oxf8b82140,X[9][9]的存储地址为Oxf8b8221c,则X[7][7]的存储地址为()。

A Oxf8b821c4 B Oxf8b821a6 C Oxf8b82198 D Oxf8b821c0

这道题有两种解法

第一种: 不知道有多少行多少列的情况下,用二元一次方程组解决

第二种 注意观察,指针指向数组列相同的情况下,相减就是中间元素的个数

这道题的答案选A

💦第六题 根据下面递归函数:调用函数Fun(2),返回值是多少()

int Fun(int n) { if(n==5) return 2; else return 2*Fun(n+1); } 1 2 3 4 5 6 7 A 2 B 4 C 8 D 16

这道题是对于函数递归的理解的考验,这道题需要我们一次一次递归进行算

这道题最终的答案是16,选D

💦第七题 以下程序的输出结果是:

#include using namespace std; void func(char **m){ ++m; cout<<*m<<endl; } int main(){ static char *a[]={"morning", "afternoon", "evening"}; char **p; p=a; func(p); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 A afternoon B 字符o的起始地址 C 字符o D 字符a的起始地址

这道题主要是对二级指针和指针数组的考验,仔细分析