【选择题】校招笔试选择题第一辑

题目

  1. 以下程序的运行结果是( )
#include <stdio.h>
int main(void) {printf("%s , %5.3s\n", "computer", "computer");return 0;
}

A. computer , puter
B. computer ,   com
C. computer , computer
D. computer , compu.ter

  1. 在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

  1. 32位系统中,定义**a[3][4],则变量占用内存空间为( )。
    A. 4
    B. 48
    C. 192
    D. 12

  2. 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?

#include <stdio.h>
int main(){long long a = 1, b = 2, c = 3;printf("%d %d %d\n", a, b, c);return 0;
}

A.1,2,3
B.1,0,2
C.1,3,2
D.3,2,1

  1. 有以下程序,程序运行后的输出结果是( )
#include<iostream>
#include<cstdio>
using namespace std;
int main(){int m=0123, n=123;printf("%o %o\n", m, n);return 0;
}

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

  1. 定义char dog[]=“wang\0miao”;那么sizeof(dog)与strlen(dog)分别是多少( )
    A. 10,4
    B. 4,4
    C. 9,9
    D. 9,4

  2. 下面两个结构体,在#pragma pack(4)和#pragma pack(8)的情况下,结构体的大小分别是( )

struct One{double d;char c;int i;
}
struct Two{char c;double d;int i;
}

A. 16 24,16 24
B. 16 20,16 20
C. 16 16,16 24
D. 16 16,24 24

  1. 有一个类A,其数据成员如下:
class A {
...
private:int a;
public:const int b;float* &c;static const char* d;static double* e;
};

则构造函数中,成员变量一定要通过初始化列表来初始化的是( )
A. a b c
B. b c
C. b c d e
D. b c d
E. b
F. c

  1. C++ 中,有如下类模板定义:
template<class T>
class BigNumber{long n;
public:BigNumber(T i) :n(i) {}BigNumber operator+(BigNumber b) {return BigNumber(n + b.n);}
}; 

已知 b1, b2 是 BigNumber 的两个对象,则下列表达式中错误的是( )
A. 3+3
B. b1+3
C. b1+b2
D. 3+b1

  1. 关于引用以下说法错误的是( )
    A. 引用必须初始化,指针不必
    B. 引用初始化以后不能被改变,指针可以改变所指的对象
    C. 不存在指向空值的引用,但是存在指向空值的指针
    D. 一个引用可以看作是某个变量的一个“别名”
    E. 引用传值,指针传地址
    F. 函数参数可以声明为引用或指针类型

  2. 以下代码共调用多少次拷贝构造函数:( )

Widget f(Widget u)
{Widget v(u);Widget w=v;return w;
}
main(){Widget x;Widget y=f(f(x));
}

A. 1
B. 3
C. 5
D. 7

  1. 在重载一个运算符为成员函数时,其参数表中没有任何参数,这说明该运算符是 ( )
    A. 无操作数的运算符
    B. 二元运算符
    C. 前缀一元运算符
    D. 后缀一元运算符

  2. 在C++中,为了让某个类只能通过new来创建(即如果直接创建对象,编译器将报错),应该( )
    A. 将构造函数设为私有
    B. 将析构函数设为私有
    C. 将构造函数和析构函数均设为私有
    D. 没有办法能做到

  3. print()函数是一个类的常成员函数,它无返回值,下列表示中正确的是( )
    A. const void print();
    B. void const print();
    C. void print() const;
    D. void print(const);

  4. 如果MyClass为一个类,执行”MyClass a[5], *b[6]”语言会自动调用该类构造函数的次数是( )
    A. 2
    B. 5
    C. 4
    D. 9

  5. 以下程序输出是( )

#include <iostream>
using namespace std;
int main(void)
{const int a = 10;int * p = (int *)(&a);*p = 20;cout<<"a = "<<a<<", *p = "<<*p<<endl;return 0;
}

A. 编译阶段报错运行阶段报错
B. a = 10, *p = 10
C. a = 20, *p = 20
D. a = 10, *p = 20
E. a = 20, *p = 10

  1. 如果有一个类是 myClass , 关于下面代码正确描述的是 ( )
myClass::~myClass(){delete this;this = NULL;
}

A. 正确,我们避免了内存泄漏
B. 它会导致栈溢出
C. 无法编译通过
D. 这是不正确的,它没有释放任何成员变量。

  1. 请问以下说法,哪个是正确的 ( )
    A. 每个类都有一个无参数的构造函数。
    B. 每个类都有一个拷贝构造的函数。
    C. 每个类能有多个构造函数。
    D. 每个类能有多个析构函数。

  2. C++中关于堆和栈的说法,哪个是错误的 ( )
    A. 堆的大小仅受操作系统的限制,栈的大小一般较小
    B. 在堆上频繁的调用new/delete容易产生内存碎片,栈没有这个问题
    C. 堆和栈都可以静态分配
    D. 堆和栈都可以动态分配

  3. C++将父类的析构函数定义为虚函数,下列正确的是哪个( )
    A. 释放父类指针时能正确释放子类对象
    B. 释放子类指针时能正确释放父类对象
    C. 这样做是错误的
    D. 以上全错

  4. 分析一下这段程序的输出( )

#include<iostream>
using namespace std;
class B
{
public:B(){cout << "default constructor" << " ";}~B(){cout << "destructed" << " ";}B(int i): data(i){cout << "constructed by parameter" << data << " ";}
private: int data;
};
B Play( B b)
{return b;
}
int main(int argc, char *argv[])
{B temp = Play(5);return 0;
}

A. constructed by parameter5 destructed destructed
B. constructed by parameter5 destructed
C. default constructor" constructed by parameter5 destructed
D. default constructor" constructed by parameter5 destructed destructed

  1. 有一个类B继承自类A,他们数据成员如下:
class A {
...
privateint a;
};class B : public A {
...
private:int a;
public:const int b;A &c;static const char* d;B* e;
}

则构造函数中,成员变量一定要通过初始化列表来初始化的是( )
A. a b c
B. b c e
C. b c d e
D. c e
E. b d
F. b c

  1. 以下程序的输出是( )
class Base {
public:Base(int j): i(j) {}virtual~Base() {}void func1() {i *= 10;func2();}int getValue() {return i;}
protected:virtual void func2() {i++;}
protected:int i;
};class Child: public Base {
public:Child(int j): Base(j) {}void func1() {i *= 100;func2();}
protected:void func2() {i += 2;}
};
int main() {Base * pb = new Child(1);pb->func1();cout << pb->getValue() << endl; delete pb;
}

A. 11
B. 101
C. 12
D. 102

  1. 有如下C++代码:
struct A{void foo(){printf("foo");}virtual void bar(){printf("bar");}A(){bar();}
};
struct B:A{void foo(){printf("b_foo");}void bar(){printf("b_bar");}
};

那么

A *p = new B;
p->foo();
p->bar();

输出为( )
A. barfoob_bar
B. foobarb_bar
C. barfoob_foo
D. foobarb_fpp

  1. 以下程序输出结果是( )
class A
{
public:virtual void func(int val = 1){ std::cout<<"A->"<<val <<std::endl;}virtual void test(){ func();}
};class B : public A
{
public:void func(int val=0) {std::cout<<"B->"<<val <<std::endl;}
};int main(int argc ,char* argv[])
{B*p = new B;p->test();return 0;
}

A. A->0
B. B->1
C. A->1
D. B->0

  1. 下面这段代码运行时会出现什么问题?
class A
{
public:void f(){printf("A\n");}
};class B: public A
{
public:virtual void f(){printf("B\n");}
};int main()
{A *a = new B;a->f();delete a;return 0;
}
  1. 代码执行后,a和b的值分别为( )
class Test {
public:int a;int b;virtual void fun() {}Test(int temp1 = 0, int temp2 = 0){a = temp1;b = temp2;}int getA(){return a;}int getB(){return b;}
};
int main()
{Test obj(5, 10);// Changing a and bint* pInt = (int*)&obj;*(pInt + 0) = 100;*(pInt + 1) = 200;cout << "a = " << obj.getA() << endl;cout << "b = " << obj.getB() << endl;return 0;
}

A. 200 10
B. 5 10
C. 100 200
D. 100 10

参考答案

  1. B
    %m:ns:其中m表示输出字符串的宽度;n表示左起截取目标字符串 n 个字符进行输出,并且是右对齐,左边补空格。
  2. C
    参考学习C语言结构体【内存对齐】与【实现位段】
  3. B
    a先和方括号结合,a是一个三行四列的二维数组;**是指针类型,32位系统下是4个字节,所以有4 * 12 = 48
  4. B
    小端存储:低位数据存放到低地址处。
    内存中,
    a的存储是:01 00 00 00 00 00 00 00
    b的存储是:02 00 00 00 00 00 00 00
    c的存储是:03 00 00 00 00 00 00 00
    之后调用printf函数,要创建函数栈帧。栈帧的创建是从高地址往低地址创建。
    函数传参压栈是从右向左进行的。
    所以有如下的栈帧情况:
    在这里插入图片描述
    %d打印,是打印4个字节,
    所以第一次打印01 00 00 00,所以第一次打印00 00 00 00,所以第一次打印02 00 00 00
    即1,0,2。
  5. C
    m是八进制数,n是十进制数,%o是按照八进制进行打印。
  6. A
    sizeof计算变量所对应类型占的字节数。
  7. C
    参考C语言结构体【内存对齐】与【实现位段】。
  8. B
    初始化列表只能对类中非静态成员变量进行初始化。
    const修饰的成员变量,引用类型的成员变量,类类型对象且该类没有默认的构造函数,这三种成员必须在初始化列表位置进行初始化。
  9. D
    如果类中具有单个参数的构造函数,该构造函数具有类型转换的作用。编译器在编译代码阶段,会调用单参构造函数进行类型转换。
  10. E
    引用底层是使用指针实现的,引用本质还是指针。
  11. D
  12. C
  13. B
    new的原理是:a.申请空间,b.调用构造函数对申请的空间进行初始化。如果构造函数私有了,就无法new创建对象了。delete的原理:a.调用类的析构函数,b.释放空间。析构函数私有了,会影响对象空间的delete释放。
  14. C
    常成员函数是指const成员函数,此时的const修饰this指针,表示在该成员函数中,不能修改类的非静态成员变量。
  15. B
    MyClass a[5]有是5个MyCLass类型对象的一个数组,需要调用5次MyClass类的构造函数;MyClass* b[6]是一个指针数组,该数组中的每个元素存放的都是MyClass*类型的指针。
  16. D
    C++中cosnt修饰的变量,就相当于一个常量,是具有替换作用的。在编译阶段,会将const修饰的变量替换成常量。
  17. C
    首先,不能在析构函数中delete this
~myClass(){delete this;
}

上面代码可以通过编译,但运行会奔溃。
delete this有两个作用,一是调用析构函数释放对象中的资源,二是调用operator delete释放对象的空间。
所以,析构函数中delete this会形成无限递归,导致程序运行栈溢出崩溃。
并不是所有的对象都是从对象new出来的,所以不能一味地delete this
this=NULL编译会失败,要知道this类型是myClass* const的,this指针的指向不能被修改。

  1. C
    类里面也可以没有拷贝构造函数。
  2. C
    堆只能动态分配(运行时决定分配空间的大小),栈静态和动态分配都可以。
  3. A
  4. A
  5. F
    d在类外初始化。
  6. C
  7. A
  8. B
    虚函数接口继承。
  9. 运行时崩溃。子类的虚表指针安放有问题。
  10. A
    头部存放的有虚表指针。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/193219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

半导体封装之倒装封装 (Flip Chip)

倒装封装 &#xff08;Flipchip&#xff09;是相对于引线键合(Wire Bonding)来说的&#xff0c;之所以叫做倒装&#xff0c;是因为flip chip是正面朝下放置。倒装芯片技术是通过芯片上的凸点直接将元器件朝下互连到基板、载体或者电路板上。引线键合的连接方式是将芯片的正面朝…

笔记本电脑关闭触摸板

大部分人用笔记本 其实都是外接的鼠标 那么在打游戏 以及一些切图操作中 为了防止碰到触摸板导致误操作 我们就可以将他关掉 我们可以按快捷键 Win i 或者 点击桌面 此电脑/我的电脑/此计算机 打开设置界面 如果 左侧菜单中有设备 那么 直接点击设备 然后左侧菜单就会有 触摸…

详细了解 MOSFET 晶体管

MOSFET 开关晶体管 MOS 管是 “金属&#xff08;Metal&#xff09;氧化物&#xff08;Oxide&#xff09;半导体&#xff08;Semi&#xff09;” 场效应晶体管&#xff0c;或者称是 “金属&#xff08;Metal&#xff09;绝缘体&#xff08;Insulator&#xff09;半导体&#xf…

2022CVPR(PoseC3D):Revisiting Skeleton-based Action Recognition

Revisiting Skeleton-based Action Recognition 摘要1、引言2、相关工作3、框架3.1. 姿势提取的良好实践3.2.从2D姿势到3D热图体积3.3.基于骨架的动作识别的3D-CNN 4、实验4.2.姿势提取4.3. 3D热图体积的预处理4.4.与GCN的比较4.5. RGBPose-SlowFast4.6.与最先进的比较 5、结论…

【蓝桥杯】带分数

带分数 题目要求用一个ab/c的形式得到一个值&#xff0c;而且只能在1~9里面不重复的组合。 可以对1~9进行全排列&#xff0c;然后不断划分区间。 #include<iostream> #include<vector> using namespace std; int st[15]; int num[15]; int res; int n;int calc(i…

如何成为一名高效的前端开发者(10X开发者)

如今&#xff0c;每个人都想成为我们所说的“10倍开发者”。然而&#xff0c;这个术语经常被误解和高估。 本质上&#xff0c;一个高效或者10倍开发者&#xff0c;在我看来&#xff0c;是指那些能够充分利用所有可用工具的人&#xff0c;通过让这些工具处理冗余和重复的任务&am…

C语言-联合和枚举

------------------------------------ --------------- ------ 最慢的步伐不是跬步&#xff0c;而是徘徊&#xff1b; 最快的脚步不是冲刺&#xff0c;而是坚持。 今天来到我们的联合和枚举类型的讲解&#xff1a; 目录 联合体类型 联合体类型的声明 联合体类型的特点 …

LeetCode(50)有效的括号【栈】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 有效的括号 1.题目 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合…

深度学习记录--初识向量化

什么是向量化&#xff1f; 之前计算logistic回归损失函数时&#xff0c;在代码实现时&#xff0c;讨论了for循环&#xff1a;过多的for循环会拖慢计算的速度(尤其当数据量很大时) 因此&#xff0c;为了加快计算&#xff0c;向量化是一种手段 运用python的numpy库&#xff0c…

跨境独立站和传统外贸的差异

跨境独立站和传统外贸主要在以下几个方面存在区别&#xff1a; 交易形式&#xff1a;传统外贸主要涉及线下交易&#xff0c;买卖双方需要经过面谈、磋商、签订合同等环节。而跨境独立站则主要通过线上平台进行交易&#xff0c;买卖双方可以通过平台发布产品、协商价格、完成支…

C++ Easyx 三子棋

目录 思路 框架​编辑 读取操作 数据操作 绘制画面 游戏的数据结构 用二维数组来模拟棋盘格 赢的情况 平局情况 Code 代码细节部分 &#xff08;1&#xff09;初始化棋盘格 &#xff08;2&#xff09; 初始化棋子类型​编辑 事件处理部分 落子 框架内代码的完善 数据处…

半监督节点分类上的HyperGCN

1.Title HyperGCN: Hypergraph Convolutional Networks for Semi-Supervised Classification&#xff08;Naganand Yadati、Prateek Yadav、Madhav Nimishakavi、Anand Louis、Partha Talukdar&#xff09;【ACM Transactions on Knowledge Discovery from Data 2022】 2.Conc…

【并发编程】CopyOnWriteArrayList详解与原理

&#x1f4eb;作者简介&#xff1a;小明Java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

SmartSoftHelp8,IIS Nginx,windows linux 高并发服务器优化配置工具

Windows IIS 性能优化配置 Windows Nginx 性能优化配置模板 Linux Nginx 性能优化配置模板 Nginx 常用命令 webconfig 优化配置详细说明 下载地址&#xff1a; https://pan.baidu.com/s/1zBgeYsqWnSlNgiKPR2lUYg?pwd8888

深入理解网络非阻塞 I/O:NIO

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

监测tcp连接状态

using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Text; using System.Threading; using System.Threading.Tasks;namespace 检测tcp连接状态 {public class TCPClient{private TcpClient client;private bool con…

npm上传发布自定义组件超详细流程

前言 vue3&#xff0c;vite&#xff0c;基于element Plus 的el-table二次封装表格并且上传到npm上&#xff0c;让别人可以通过npm安装你的插件。 一、创建一个新的vue 项目 npm create vuelatest 自己取一个名字&#xff0c;然后一直回车 完成以后进入项目npm i,有用到eleme…

API无代码开发让尘锋SCRM与营销系统集成,提高电商平台客服效率

API无代码开发的力量 随着电商平台业务的日益增长&#xff0c;客服系统的效率和响应速度成为了企业关注的焦点。API无代码开发的出现&#xff0c;为企业提供了一个高效的解决方案。API(Application Programming Interface&#xff0c;应用编程接口)允许不同的软件系统之间进行有…

C++ IO库

IO类 IO对象不能拷贝和赋值 iostream 表示形式的变化&#xff1a; 将100转换成二进制序列 然后格式化输出 x,y共用一块内存 输出的时候用不同的方式解析同一块内存 操作 格式化&#xff1a;内部表示转换为相应字节序列 缓存&#xff1a;要输出的内容放到缓存 编码转换&…

Xilinx Zynq-7000系列FPGA多路视频处理:图像缩放+视频拼接显示,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像处理方案FPGA图像缩放方案FPGA视频拼接叠加融合方案推荐 3、设计思路详解HLS 图像缩放介绍Video Mixer介绍 4、vivado工程介绍PL 端 FPGA 逻辑设计PS 端 SDK 软件设计 5、工程移植说明vivado版本不一致处理FPGA型号不一致处理其他…