【day02】选择题题解

day02

1

有以下定义:

int a[10]; 
char b[80];

函数声明为:

void sss(char[], int[]);

则正确的函数调用形式是()。

A sss(a, b);
B sss(char b[], int a[]);
C sss(b[], a[]);
D sss(b, a);

正确答案:D

a是int型数组,应该传入函数的第二个参数,综上所述选择D

2

数组a的定义语句为“float a[3][4]; ”, 下列()是对数组元素不正确的引用方法。
A a[i][j]
B *(a[i] + j)
C ((a + i) + j)
D *(a + i * 4 + j)

正确答案:D

a[i] 与 *(a+i)等价

a[i][j] 与 *(*(a+i)+j)等价

D选项只有一层解引用,无法访问到数组元素

3

下面叙述错误的是()

char acX[] = ”abc”; 
char acY[] = { ‘a’, ’b’, ’c’ }; 
char *szX = ”abc”;
char *szY = ”abc”;

A acX 与 acY 的内容可以修改
B szX 与 szY 指向同一个地址
C acX 占用的内存空间比 acY 占用的大
D szX 的内容修改后,szY 的内容也会被更改

正确答案:D

A:正确,acX与acY都是字符数组,其中数据可以修改

B:正确,szX与szY都是常量字符串,指向同一个常量字符串

C:正确,acX比acY多一个’\0’,故多一个字节

D:错误,szX内容修改后只是指向了其他的字符串常量而已,并不会修改szY的指向

4

下列代码的运行结果是()

int a[] = { 1, 2, 3, 4 };
int *b = a;	//b指向a数组的起始地址
*b += 2;	//相当于a[0]+=2,此时a[0]=3
*(b + 2) = 2;	//相当于赋值语句a[2]=2
b++;	//此时b指向a数组的第2个元素
printf("%d, %d \n", *b, *(b + 2));	//*b -> a[1]  *(b+2) -> a[3]

A 1, 3
B 1, 2
C 2, 4
D 3, 2

正确答案:C

5

32位cpu选择缺省对齐的情况下,有如下结构体定义:

struct A
{ 
	unsigned a : 19; 
	unsigned b : 11; 
	unsigned c : 4; 
	unsigned d : 29; 
	char index; 
};

则**sizeof(struct A)**的值为()

A 9
B 12
C 16
D 20

正确答案:C

抓住题意:32位机器,所以默认以4字节来开辟空间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HuR131Mc-1612587903648)(https://raw.githubusercontent.com/gongruiyang/BlogImage/main/img/20210206102338.png)]

6

以下关于C++的描述中哪一个是正确的:
A 任何指针都必须指向一个实例
B 子类指针不可以指向父类实例
C 任何引用都必须指向一个实例
D 引用所指向的实例不可能无效

正确答案:C

A:错误,指针可以是空指针

B:错误,通过强转父类实例地址,可以让子类指针指向

C:正确,引用不可以是空引用

D:错误,引用不可以是空引用

7

以下不是double compare(int, int)的重载函数的是()

A int    compare(double, double)
B double compare(double, double) 
C double compare(double, int) 
D int    compare(int, int)

正确答案:D

函数重载条件:①参数数据类型不同 ②参数个数不同 ③函数名相同

其中③必须满足,①和②中可以满足其中一个或多个,都可以构成函数重载

仅仅返回值不同,无法构成函数重载

8

关于虚函数的描述正确的是()
A 派生类的虚函数与基类的虚函数具有不同的参数个数和类型
B 内联函数不能是虚函数
C 派生类必须重新定义基类的虚函数
D 虚函数可以是一个static型的函数

正确答案:B

A:错误,子类可以从父类继承过来虚函数,也可以在子类中定义属于自己的虚函数

B:正确:内联函数可以是虚函数

C:错误,子类需要实现父类的虚函数,而不是重新定义

D:错误,仅非静态成员函数可以是虚函数

9

请将下列构造函数补充完整,使得程序的运行结果是5

#include<iostream> 
using namespace std; 
class Sample
{ 
public: 
	Sample(int x)
	{ 
		________ 
	}
	~Sample()
	{ 
		if(p)
			delete p; 
	}
	int show()
	{ 
		return *p; 
	}
private: 
	int*p; 
};
int main()
{ 
	Sample S(5); 
	cout<<S.show()<<endl; 
	return 0; 
}

A *p = x;
B p = new int(x);
C *p = new int(x);
D p = &x;

正确答案:B

即需要给成语变量申请空间也需要将空间内的值初始化为5

A:错误,未申请空间

B:正确,申请空间并初始化为5

C:错误,new返回值为地址,不能用*p来接收,应该用p接收

D:错误,未申请空间

10

关于c++的inline关键字, 以下说法正确的是()
A 使用inline关键字的函数会被编译器在调用处展开
B 头文件中可以包含inline函数的声明
C 可以在同一个项目的不同源文件内定义函数名相同但实现不同的inline函数
D 定义在Class声明内的成员函数默认是inline函数
E 优先使用Class声明内定义的inline函数
F 优先使用Class实现的内inline函数的实现

正确答案:D

A:错误,编译器可能会不将内联函数展开,原因可能是函数体太大,比如虚函数和递归函数就不会被正常内联. 通常, 递归函数不应该声明成内联函数.

B:错误,头文件中必须同时含有内联函数的声明和定义

C:错误,多个源文件同名的内联函数的实现必须相同

D:正确,类中定义的成员函数默认都是内联函数

E:错误,类中定义的成员函数都是内联函数,加不加inline都一样,没有优先一说

F:错误,类中定义的成员函数都是内联函数,加不加inline都一样,没有优先一说

注意:类中定义的成员函数都是内联函数,类中声明的成员函数不是内联函数

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值