持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第N天,点击查看活动详情 💦第一题 使用printf函数打印一个double类型的数据,要求:输出为10进制,输出左对齐30个字符,4位精度。以下哪个选项是正确的?
A %-30.4e B %4.30e C %-30.4f D %-4.30f
做题的时候我们先把重点找出来,double,十进制,左对齐,4精度
因为是十进制输出,所以肯定不是%e,%e是以指数形式输出,因为是左对齐,所以是-m.n%
m:表示对齐数 n:精度
所以这道题的答案是%-30.4f ,选C
💦第二题 请找出下面程序中有哪些错误()
int main(){ int i = 10; int j = 1; const int *p1;//(1) int const *p2 = &i; //(2) p2 = &j;//(3) int *const p3 = &i;//(4) *p3 = 20;//(5) *p2 = 30;//(6) p3 = &j;//(7) return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 A 1,2,3,4,5,6,7 B 1,3,5,6 C 6,7 D 3,5
这里有const,我们来了解两个概念:
常量指针:指针所指空间的值不能发生改变,不能通过指针解引用修改指针所指空间的值,但是指针的指向可以发生改变。 指针常量:指针本身是一个常量,指针的指向不能发生改变,但是指针所指空间的值可以发生改变,可以通过指针解引用改变指针所指空间的值。 区分:const *的相对位置
const 在 * 的左边,常量指针 const 在 * 的右边,指针常量 1 2 是常量指针,区别是2进行了初始化
因为是常量指针,所以指针指向可以改变,所以3是对的,但不能通过解引用改变所指空间的值,所以6是错的
4是指针常量,所以可以改变所指空间的值,所以5是对的,但不能改变指针的指向,所以7是错的
所以这道题的答案是C
💦第三题 下面叙述错误的是()
char acX[]="abc"; char acY[]={'a','b','c'}; char *szX="abc"; char *szY="abc";
1 2 3 4 5 A acX与acY的内容可以修改 B szX与szY指向同一个地址 C acX占用的内存空间比acY占用的大 D szX的内容修改后,szY的内容也会被更改
这道题acX和acY都是字符数组,只不过初始化的方式不同,szX和szY都是指针,指向同一个常量字符串,B正确
字符数组定义的内容实在栈上开辟的,是可以修改的,A正确
acX是字符串初始化,acY是数组初始化,字符串最后有个\0,所以C正确
szX的内容改变指的是szX的指向发生了改变,并不是字符数组发生了改变,所以szY不会发生改变,所以D错误
这道题的答案选D
💦第四题 在头文件及上下文均正常的情况下,下列代码的运行结果是()
int a[] = {1, 2, 3, 4};
int *b = a;
*b += 2;
*(b + 2) = 2;
b++;
printf("%d,%d\n", *b, *(b + 2));
1 2 3 4 5 6 A 1,3 B 1,2 C 2,4 D 3,2
我们一条语句一条语句分析,int *b = a,定义了一个指针b指向数组首元素
*b += 2 的优先级高于+=,所以b先解引用得到1,再1+2=3,所以数组首元素的值变为3
*(b+2)= 2,由于括号的优先级高,先向右偏移两个位置,再将所指向的元素改变为2;
b++ 从数组首元素偏移到下一位
所以现在数组的元素是 3 2 2 4 ,b指向第二个元素
所以这道题的答案是2 4,选C
💦第五题 下列关于C/C++的宏定义,不正确的是()
A 宏定义不检查参数正确性,会有安全隐患 B 宏定义的常量更容易理解,如果可以使用宏定义常量的话,要避免使用const常量 C 宏的嵌套定义过多会影响程序的可读性,而且很容易出错 D 相对于函数调用,宏定义可以提高程序的运行效率
这道题主要是考验对宏的理解,宏是没有安全检测的,所以A正确
B选项恰好说反了,宏是没有安全检测的,并且在预处理阶段进行宏替换,所以是无法进行调试的,所以要尽量使用const常量
宏定义很容易导致优先级出错,所以C正确
宏定义相对于函数调用来说,没有创建函数栈帧,没有函数压栈的开销,是可以提高程序的运行效率,所以D是正确的
这道题的答案是B
💦第六题 有以下定义:
int a[10]; char b[80]; 1 2 函数声明为:
void sss(char[],int[]); 1 则正确的函数调用形式是() A sss(a,b); B sss(char b[],int a[]); C sss(b[],a[]); D sss(b,a);
函数在调用的时候传入的参数如果是数组类型,调用的时候我们只需要传入数组名,即数组的地址
A的类型写反了,B传入的参数写了数据类型,这是不需要的的,C不应该加[]
这道题的答案是D
💦第七题 用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数()
A int *a[10]; B int (*a)[10]; C int (*a)(int); D int (*a[10])(int);
A选项[]的优先级高于*,所以表面这是一个数组,数组里面存放的是in ————————————————