C/C++刷题知识点总结
纠正一些知识性偏见、欠缺:
- 变量占用内存大小,是用
sizeof()
计算出来那个,定义字符型数据时后面不添加’\0‘的,但是在字符串数组后面是添加的;例如char a[]={'a','b','c'};``char b[]={"abc"};
两个数组的长度是不一样的。- 按位与是转化为二进制,按照规则:
1&1=1 1&0=0 0&0=0
进行计算;feof()
函数从输入流进行读数据,如果文件未达到文末,则返回非0值,否则为0值- 对于一个频繁使用的短小函数,C中是用宏定义的,C++中是用内联函数实现
牛客网
一、选择判断
1.分析下面代码有什么问题?
void test2()
{ char string[10], str1[10]; int i; for(i=0; i<10; i++) { str1 = 'a'; }
strcpy( string, str1 );
}
知识点:
strcpy
从源地址
开始拷贝,直到遇到\0
才结束。如果一直没有遇到\0
,就会导致越界访问非法内存
。数组名
为指向第一个元素
的指针
,为char *const类型
的右值类型
,右值类型是不可以
被赋值的
正解如下:
void test2()
{char string[10], str1[10];int i;for(i=0; i<9; i++){str1[i] = 'a';}str1[9] = '\0';strcpy( string, str1 );
}
2.可以参加位运算的数据类型可以是:int
、char
、long int
不可以是:double
、float
是不可以的
3.**判断题:**静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )
4.字符串“a+b=20\n”的长度是(7)?
知识点:长度使用函数
strlen()
,内存大小用sizeof()
本题长度为:a、+、b、=、2、0、\n共计7个
**string定义的变量占用内存大小:**28字节(C++中定义的这个变量就是28字节)
5.编译器
如果定义如下类:class Empty{}请选择编译器为之生成的函数有哪些? ( )Empty() { … }Empty(const Empty& rhs){ … }Empty& operator=(const Empty& rhs) { … }~Empty() { … }答案:1234
解析:
class Empty { public: Empty(); //缺省构造函数 Empty(const Empty &rhs); //拷贝构造函数 ~Empty(); //析构函数 Empty& operator=(const Empty &rhs); //赋值运算符 Empty* operator&(); //取址运算符 const Empty* operator&() const; //取址运算符(const版本) };
以上函数将会被编译器生成!
6.在重载某运算符时,若运算符函数的形参表中没有参数,则可能的情况有(ABC)
A.该运算符是一个单目运算符。
B.该运算符函数有一个隐含的参数this。
C.该运算符函数是类的成员函数。
D.该运算符函数是类的友元函数。
知识点:
运算符操作数至少为1个,
首先友元函数重载运算符,必须至少有1个参数,因为没有隐含的this指针。
对于成员函数重载运算符,参数可以为0个,因为有隐含的this指针。(成员运算符重载函数不能用static修饰)。
因而对于无参数的运算符重载函数,必然为单目运算符的成员函数,当然有
this
指针。
7、已知函数 int fun( int i )
。以下声明函数指针pfunc
的语句正确的是(C)
A.int*pfunc( int );
B.int *pfunc( int )();
C.int(*pfunc)(int);
D.int(*pfunc)(int)();
根据右左法则
int (*P)( ) 是函数指针,指向函数的指针, p 是一个指向函数入口的指针 变量, 该函数没有形参 函数的返回值是int 型
int *p() 是指针函数,返回值为指针的函数 p 是函数的入口地址, 该函数没有形参, 返回值为 int * 型
定义一个函数指针p,只能指向返回值为int,形参为1个int的函数
8.正则表达式语法中 \d 匹配的是?(A)
A.数字
B.非数字
C.字母
D.空白字符
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。
\W 匹配非字母、数字、下划线。等价于 ‘[^A-Za-z0-9_]’。
9.已知表达式int m[]={0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量最大值相等?(B)
- m. length()
- m. length-1
- m. length()+1
- m. length+1
数组是有length属性,String是有.length()方法,本题是数组,那么A、C就是错的表示方式,m. length = 7
10.在下列表示引用的方法中,( A)是正确的。已知:int m=10;
A.int &x=m
B.int &y=10
C.int &z;
D.float &t=&m;
引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
引用的声明方法:
类型标识符 &引用名=目标变量名
;
举个例子:
int a;
int &ra=a; //定义引用ra,它是变量a的引用,即别名
说明:
(1)&在此不是求地址运算,而是起标识作用。
(2)类型标识符是指目标变量的类型。
(3)声明引用时,必须同时对其进行初始化。
(4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
ra=1; 等价于 a=1;
(5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
(6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
引用的主要作用:
(1)在引用的使用中,单纯给某个变量取个别名是毫无意义的,引用的目的主要用于在函数参数传递中,解决大块数据或对象的传递效率和空间不如意的问题。
(2)用引用传递函数的参数,能保证参数传递中不产生副本,提高传递的效率,且通过const的使用,保证了引用传递的安全性。
(3)引用与指针的区别是,指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
(4)使用引用的时机。流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。
11.若言int a[10],*p=a;则以下表示中不能代表a[6]的是(D)。
A.p[6]
B.*(a+6)
C.*(p+6)
D.p+6
p表示a的首地址,D表示a[6]的地址,但是不是表示a[6]
12.下面程序结果输出为?
#include <iostream>
using namespace std;
class A
{
public:A(){cout << "1";}A(A &a){cout << "2";}virtual ~A(){cout << "3";}
};class B: public A
{
public:B(){cout << "4";}B(B &b){cout << "5";}~B(){cout << "6";}
};int main()
{A *pa = new B();delete pa;return 0;
}
答案:1463
考察的是对继承体系中的构造和析构函数调用顺序的理解。
在调用new B()的时候,因为B继承A,所以会首先调用其父类的构造函数,输出1
然后调用自己的构造函数,输出4
在析构的时候顺序是反过来的,先调用自己的析构函数,输出6
然后调用父类的析构函数,输出3
而这里没有用到拷贝构造函数,所以不用管它。
13.找出以下关于float的不正确的声明
A.float foo=-1;
B.float foo=1.0;
C.float foo=2.02f;
D.float foo=0x0123;
答案:B
浮点型默认是double型的,所以B有问题,整型是可以转换到单精度型的。
14.用Struct代替class的时候以下哪些描述是对的?
知识点:
C++中的类(
class
),结构(struct
)的区别:class
的成员默认为private
,但是可以声明成为public
、private
和protected
,结构中的成员默认都是public
15.以下选项如果可以初始化正确,那么就会初始化正确,那么以下哪种语法在C++中初始化以后编译会错误?其中X为一C++类
A.const X * x
B.X const * x
C.const X const * x
D.X * const x
答案:CD
const
在*
前面 都表示*x
不可修改C中
*
前出现两个const
,g++编译器提示duplicate’const’
,语法错误
D中const
在*
后面,表示指针不可修改,需要初始化。const
类型的指针声明时必须初始化
p.s
X* const x
放在类中当一个成员,是没有错误的。
const
知识点:
const
限定一个对象为只读属性。
先从一级指针说起吧:
(1)const char p
限定变量p为只读。这样如p=2这样的赋值操作就是错误的。
(2)const char *p
p为一个指向char类型的指针,const
只限定p指向的对象为只读。这样,p=&a或 p++等操作都是合法的,但如*p=4
这样的操作就错了,因为企图改写这个已经被限定为只读属性的对象。
(3)char *const p
限定此指针为只读,这样p=&a或 p++等操作都是不合法的。而p=3这样的操作合法,因为并没有限定其最终对象为只读。
(4)const char *const p
两者皆限定为只读,不能改写。
有了以上的对比,再来看二级指针问题:
(1)const char **p
p为一个指向指针的指针,const
限定其最终对象为只读,显然这最终对象也是为char类型的变量。故像**p=3
这样的赋值是错误的,而像p=? p++这样的操作合法。
(2)const char * const *p
限定最终对象和 p指向的指针为只读。这样*p=?
的操作也是错的。
(3)const char * const * const p
全部限定为只读,都不可以改写。
总结一下就是看const
后跟的是什么,*
为对象,变量为指针(针对const
指针情况)
16.数据封装
C++是通过类进行封装,是把数据和与这些数据有关的操作封装在一个类中
C++中struct的默认类型是public,但是也可以设置为private形式
17.数组、指针
a:整个四维数组的地址
*(a+i) = a[i]
*(a+i)+j = a[i] +j
*((a+i)+j) = a[i][j]
*((a+i)+j)+k = a[i][j]+k
*( *((a+i)+j)+k ) = a[i][j][k]
*( *((a+i)+j)+k )+l = a[i][j][k]+l
*( *(*((a+i)+j)+k )+l ) = a[i][j][k][l]
18.关于const
的问题
△ 欲阻止一个变量被改变,可以使用
const
关键字。△ 在一个函数声明中,
const
可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值△ 对于类的成员函数,有时候必须指定其返回值为
const
类型,以使得其返回值不为“左值”△ 对于类的成员函数,若指定其为
const
类型,则表明其是一个常函数,不能修改类的成员 变量;
19.数据存储
union X{int x;char y[4]; };//答案为::22或33
解释:
0x
是十六进制存储,若是小端存储,低位在低地址,即0x44
是最低位,那么y[0]就是0x44
,那么y[1]就是0x33
,若为大端存储,那么高位在低地址,0x11
是高位,即可得y[1] =0x22
,
20.指针、返回值
有如下一段程序:int f1(float);int f2(char);void f3(float);int (*pf)(float);以下语句合法的是( A )?A.int (*p)(float)=&f1; B.pf=&f2; C.pf=&f3; D.pf=f3;解释:HTML中的符号实体 & 就是符号&int (*pf)(float)表示定义一个返回值为int,参数为float的函数指针,根据返回值类型以及参数类型一致选择A。
21.C++
中的struct
- 在C++中,来自
class
的继承默认按照private
继承处理,来自struct
的继承默认按照public
继承处理class
的成员默认是private权限,struct
默认是public
权限- c里面的
struct
只是变量的聚合体,struct
不能有函数- c++的
struct
可有构造和析构函数
22.根据程序填写结果
有以下程序
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{ofstream File1("text.txt");
string d("20160314");
string y=d.substr(0,4);
int k=d.find("2");
int i=d.find("3");
string m=d.substr(k+2,i-k);
string dd=d.substr(i+1,2);
string n=dd+m+y;
File1<<n<<endl;
File1.close();
}
文件text.txt中写入的结果是(14160312016)解释:substr(a, b):从字符串的下标a开始,复制长度为b的字符子串find(c):返回字符串中第一个值为c的下标因此,k=0,i=5
23.关于重载和虚函数说法
A.虚函数是类的成员函数
B.虚函数实现了C++的多态性
C.函数重载允许非成员函数,而虚函数不行
D.函数重载的调用是根据参数个数、序列来确定,而虚函数依据对象来确定
相关文章:

虚幻引擎5:从零开始的蓝图近战AI学习教程
Unreal Engine 5: Blueprint Melee Combat AI from Scratch 创建一个动作游戏,以打击2个独特的人工智能,包括一个火蔓延龙! 你会学到什么 学习使用虚幻引擎5的技巧 如何通过蓝图设计和创建人工智能 学会创造两种独特的人工智能 学会在战斗中…

git add 文件夹_Git的下载安装以及基本操作
二,配置git:用户名和邮箱在桌面右键-【Git Bash Here】输入命令:git config --global user.name "lijiang"git config --global user.email "2906718132qq.com"查看用户名和邮箱是否配置成功,去这个路径&…

scapy windows install
最近有点扫描网络的需求,都说scapy好,但是安装是个事(当然指的是windows安装)有个scapy3k,支持python3,可惜需要powershell,也就是说windows xp是没有戏了。 网上说最好python2.6,但…

Enda 的 2015 下半年读书计划
2015下半年的读书计划 php 方面 《PHP设计模式》 《PHP核心技术与最佳实践》 《learning php设计模式》 《深入php》 Mysql 方面 《高性能MySQL》 《深入理解mysql核心技术》 其他 《天才在左疯子在右》 大家有什么好书吗?推荐推荐嘛~~

Qt嵌入外部EXE程序,并显示在主界面中!
一、获取程序句柄以及类 打开Visual Studio 进行查询 二、QT调用程序 H文件 #ifndef VISUAL_H #define VISUAL_H#include <QWidget> #include <QProcess> #include<Windows.h> #include<QWindow>QT_BEGIN_NAMESPACE namespace Ui { class Vi…

UE虚幻引擎:建筑可视化学习教程 Unreal Engine : Architectural Visualization
使用这套4合1虚幻引擎课程包提高您的建筑可视化技能 你会学到什么 准备要导出的Revit模型 使用虚幻数据史密斯产品查看器工具 创造UE的材料 交换材料 点亮你的模型 添加交互 打包内容以便在虚拟现实和移动设备上分发 迁移材料包 批量更换材料 静态和动态照明 光照图分析、校正…

NOIP2013普及组 T2 表达式求值
OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream>2 #include<algorithm>3 #include<cmath>4 #include<stack>5 #include<cstring>6 #include<cstdio>7 using namespace std;8 char c[20000000];9 10 stack&…

清除图片下默认的小间隙_密封间隙对迷宫密封性能影响的三维数值分析
建立迷宫密封的三维模型;采用GAMBIT对迷宫间隙进行非结构化网格划分,模拟密封间隙对迷宫密封性能的影响,并与二维截面模型模拟结果进行对比。结果表明:在考虑周向湍流的影响下,泄漏量相对于仅考虑横向及纵向湍流f的影响…

Thrift抛直接内存OOM一点解决思路
2019独角兽企业重金招聘Python工程师标准>>> 最近使用Thrift TThreadedSelectorServer服务方式,运行一段时间就会抛OutOfMemoryError: Direct buffer memory异常; java.lang.OutOfMemoryError: Direct buffer memoryat java.nio.Bits.reserve…

C/C++、嵌入式开发岗笔试集锦
图标链接 C运算符检索(点击查看 - 转) C构造函数、拷贝函数等理解(点击查看 - 转) 题目 ⭐⭐⭐1.(STL库)请问C的STL库中map的底层数据结构为(),multimap的底层数据结…

Blender制作3D模型导出到UE5完整学习教程
学习如何在Blender中创建AAA游戏资产,然后导出到虚幻引擎5的完整指南 你会学到什么 遵循关于创建一套AAA游戏就绪的优质中世纪市场摊位的完整指南 最大化您的推荐人的潜力,以开发强大的游戏资产概念 使用Blender并了解其界面和快捷方式 从初级水平到世界…

[纪录]仿IOS滚轮效果(竖直滑动选择器)
今天想做一个类似这样的一个效果,可是UI的模板是参考IOS做的,于是就各种百度各种搜,最后让我找到了一个仿IOS滚轮的一个Demo,稍微研究了一下,发上来,大家一起学习,以后也方便我查看,就不用再去百度了,嘿嘿! 仿IOS滚轮效果 首先是一个类,继承了ScrollView public class WheelVie…

win7如何设置wifi热点_xp系统怎么设置无线网络热点(电脑设置wifi热点步骤)
现在手机基本都是可以开启wifi热点功能,但有时候因为各种原因,比如没有无线或者路由器有问题等情况,手机又需要使用网络,这个时候需要用电脑设置wifi热点。那么,怎么用电脑设置wifi热点呢?下面分别用win10系…

汇编语言第二课作业-实验1
Debug命令-摘自百度百科A 汇编命令 功能: 将指令直接汇编成机器码输入到内存中。说明: 用于小段程序的汇编及修改目标程序,所有输入的数字均采用十六进制, 用户装入内存的汇编语句是连续存放的,若没有指定地址…

C++、嵌入式软开之数据结构
总结: 1.二叉树搜索树是需要进行比较大小,满足传递性才可; 刷题总结: 1.(二叉树遍历)已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是(…

3dsMax插件V-Ray渲染与合成学习课程 3ds Max: Rendering for Compositing in V-Ray Next
使用渲染元素,3ds Max的V-Ray Next对创建高质量合成所需的参数(如反射、阴影、遮罩等)提供了精细的控制。在本课程中,布莱恩布拉德利展示了如何在Photoshop和After Effects等应用程序中使用V-Ray Next为后期制作工作流专门创建渲染。探索渲染元素用户界面…

对找数程序的理解
经过几个小时的思考,总算是对老师出的这个程序题有了一定的了解。该C#程序是一个对数字进行查找的程序。程序清单如下: using System; using System.Collections.Generic; using System.Text; namespace FindTheNumber { class Program { s…

win10鼠标灵敏度怎么调_和平精英最稳压枪灵敏度怎么调教程,适合所有段位以及适合国际版PUBG手游压枪...
和平精英(原刺激战场)主播最稳压枪灵敏度怎么调?不妨看看花了五个小时调试的最稳和平精英压枪灵敏度吧。废话不多,上图按照调。保证你满意,你离主播只差点意识此和平精英压枪灵敏度适合所有段位 也适合PUBG(和平精英国际版)-------分割线---…

C++基本知识点集锦(2022秋招)
(1)构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同) (2)C的空类,编译器会…

Sketchup插件Vray户外场景设计渲染教程 Vray Next For Sketchup Exterior
Sketchup户外场景设计的Vray Next 你会学到什么 渲染白天和夜晚场景 后期制作 Sketchup的Vray Next 中级sketchup用户 大小解压后:3.83G 1280X720 mp4 语言:英语中英文字幕(根据原英文字幕机译更准确) 大家好, 我是…

实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用,理解系统调用的工作机制。 实验过程: 本文实验选择24号…

三菱plc232数据线驱动下载_三菱PLC与西门子PLC有什么区别?
三菱PLC与西门子PLC有什么区别?分别有什么优点和缺点?该如何选择?学习哪种品牌?首先它们的编程理念不同,三菱PLC是日系品牌,编程直观易懂,学习起来会比较轻松,西门子PLC是德国品牌&a…
Github 树形菜单插件
ajax显示gitlab的,很像mac的树形展示。 直接在左侧做了一个ajax的树,每次访问gitlab自动加载。非常方便呢,在国内网速这么慢的情况下更显得好用了。 下载地址: https://github.com/buunguyen/octotree/tree/master/dist chrome安装…

C/C++、嵌入式秋招之SQL篇
⭐⭐1.选取最大(小)值 SELECT * FROM employees order by hire_date desc limit 0,1解释: 知识点 ORDER BY 根据指定的列对结果集进行排序,默认按照升序,降序 ORDER BY DESCLIMIT(m, n) 从第 m 1 行开始取 n 条记录…

C4D样条曲线建模大师班 Cinema 4D MasterClass: Master Modelling using Splines
通过本课程,快速学习使用样条曲线建模的基础知识,并将您的技能提升到一个新的水平 你会学到什么 能够使用样条线对整个对象进行建模 三维建模和UV展开 能够找到模拟复杂形状的最佳方法 无数的提示和技巧 在项目中应用蓝图的真实尺寸 对Uv制图有更好的理…

从头到尾彻底解析Hash表算法
从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26 阅读: 25156 次 推荐: 14 原文链接 [收藏] 作者:July、wuliming、pkuoliver 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于H…

ftp windows无法访问此文件夹请确保输入的文件名_企业实战|企业FTP搭建
安装Vsftpd提前关闭selinux 和firewalld防火墙1.安装vsftp软件包 $ yum -y install vsftpd*2.启动vsftpd服务器 $ systemctl restart vsftpd $ systemctl enable vsftpd3.检查服务是否正常启动 $ ps -ef|grep vsftp && netstat -tunlp|grep 21至此 匿名用户的ft…

C++、嵌入式软开之指针
1.(指针数据)int* pa[5]; 描述: pa是一个具有5个元素的指针数组,每个元素是一个int类型的指针; 2.(二级指针)以下程序的输出结果是: #include <iostream> using namespace std; void func(char **m){++m;cout

3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程
通过学习可用于相机放置、建模、修整等的策略,生成令人印象深刻且逼真的建筑三维渲染。了解如何将您的3D渲染场景提升到一个新的水平,以使您的图像引人入胜、有趣且讨人喜欢。在本课程中,讲师Verena Tatiana首先讨论了不同的细节处理方法&…

所有表单对象_Laravel 表单方法伪造与 CSRF 攻击防护
1、表单方法伪造有时候,我们可能需要手动定义发送表单数据所使用的 HTTP 请求方式,而 HTML 表单仅支持 GET 和 POST 两种方式,如果要使用其他的方式,则需要自己来定义实现。HTTP 请求方式概述最常见的 HTTP 请求方式自然是 GET 和…