本章给大家带来的是C++内存管理。在C语言阶段,我们经常使用malloc,calloc,realloc,free进行内存管理。但是,C语言的内存管理存在很多缺陷,会对程序的稳定性和安全性造成影响。不过,C语言的内存管理同时也给程序员提供了更大的自由度和灵活性,可以更加精细地控制程序的内存使用。而C++有他自己的一套内存管理,就是:new和delete。C++中的内存管理是一项非常重要的任务。C++为开发人员提供了灵活的内存管理功能,但同时也带来了内存泄漏、野指针等风险。所以,小伙伴们一定要扎扎实实弄清楚内存管理~
在C语言中,指针是一种用于存储内存地址的变量类型。指针提供了一种强大的机制,允许我们直接访问和操作内存中的数据。下面是一些关于C语言指针类型的解释:1.声明指针:
在C语言中,可以使用星号(*)来声明一个指针变量。指针变量存储的是内存地址,它指向某个特定类型的数据。
例如,声明一个指向整数的指针变量:int *ptr;2.获取指针的地址:
可以使用取地址操作符(&)来获取变量的地址
在C语言中,数组是一种用于存储多个相同类型元素的连续内存空间。数组提供了一种有效的方法来处理大量相似数据,以及在程序中组织和访问这些数据。
以下是关于C语言数组类型的一些解释:1.声明数组:
在C语言中,数组的声明包括元素类型和数组名,并使用方括号 [] 指定数组的大小(元素个数)。
例如,声明一个包含 5 个整数的数组:int numbers[5];2.初始化数组:
可以使用初始化列表来为数组提
1 语句
C语言语句(指令) : 就是表达程序员某种操作或某种意图的指令.
简单语句
单语句 : 约定以 ; 号结束
如 ;
表达式 + ; ==> 单语句
a = 5
赋值表达式
a = 5 ;
赋值语句
3 + 5
加法表达式
3 + 5 ;
加法语句
;
空语句
....
复合语句
{} 语句块
{
//接0个或多个语句(单语句或者复合语句)
}
if 语
题目
给定你一个长度为 $n$ 的整数数列。
请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 $n$ 。
第二行包含 $n$ 个整数(所有整数均在 $1∼109$ 范围内),表示整个数列。
输出格式
输出共一行,包含 $n$ 个整数,表示排好序的数列。
数据范围
$1≤n≤100000$
输入样例:
5
3 1 2 4 5
在C语言中,强制类型转换是直接使用()的方式,这种转换方式是有安全隐患的,隐患发生时,也不易排查,在C++中,引入了四个新的关键字,来支持强制类型转换
某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:
面试官:strcpy函数使用过吧?
二师兄:用过。
面试官:这个函数有什么作用?
二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。
面试官:strncpy函数也使用过吧,和strcpy有何不同?
二师兄:strncpy多了一个size_t的参数,用于避免缓冲区溢出。
面试官:能否实现一个strncpy函数?
二师兄:好
某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:
面试官:strcpy函数使用过吧?
二师兄:用过。
面试官:这个函数有什么作用?
二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。
面试官:strncpy函数也使用过吧,和strcpy有何不同?
二师兄:strncpy多了一个size_t的参数,用于避免缓冲区溢出。
面试官:能否实现一个strncpy函数?
二师兄:好
引用在c++中的使用非常常见,可以说是很重要的,引用的常引用相关的问题让很多人稍不留神就出错了,这里我们就来谈谈常引用的问题。关于权限有权限缩小和权限放大的问题,比如一个文件,当初它只有读的权限,而现在你给它再加个写的权限,这就是权限放大;又或当初它读,写的权限都有,但你把他某个权限或所有权限都限制了,这就是权限缩小。在指针和引用赋值中,权限可以缩小,但不可以放大:这里通常指的是变量的值可不可以改的问题,如果说是从改到不能改,这就是将权限缩小了,这是可行的;如果说是从不能改到能改,这就是权限放大了,此时是不行的。 而引用相当于起别名,对于这个别名的权限相对于本名变量有什么变化,这需要自己来决定。当自己决定别名的权限之后(不能与第二点表达的起冲突),对它的使用就要留个心眼。
C语言是一门结构化的程序设计语言1、顺序结构2、选择结构3、循环结构一、语句C语言中 由一个分号隔开的就是一条语句;//该是语句——具体为空语句分支语句:ifswitch循环语句:forwhiledo whilegoto语句:分支语句(选择结构)if语句的语法结构:第一种:如表达式为真,if语句才可以执行if(表达式)
语句;第二种:如表达式为真执行语句1,为假执行语句2if(表达式)
语
1、一个变量如用来存放地址的,该变量称为指针变量int* p=&a; //p的类型是int*,变量是p; //:解引用操作符/间接访问操作符 #include <stdio.h>
int main()
{
int a=10;//分配了4个字节的空间
printf("%p\n",&a);
int* p=&a; //这里的*只提示p
1、'\0' 0 '0' 的区别'\0':是字符串'abcd\0'的结束标志,是转义字符,数值为00:只与'\0'的数值相同'0':属于字符,ACSII的值为48,不过相对而言是数字字符,其他:'a' 'c' 'q' 是字母字符EOF——end of file—文件结束标志,值为-1eg:使用自定义函数Min,求最小值#inc
本章给大家带来的是C++类和对象!在面向对象编程中,类是用来描述某个类别对象通用属性和行为的模板,它是一种抽象的数据类型,包括成员变量和成员函数。而对象则是类的实例,是具体存在的数据,拥有自己的状态和行为。当我们创建一个对象时,就是根据类的定义来分配内存,创建对象实例,并初始化对象的成员变量以及相关状态。类具有封装、继承和多态等特性。封装性将数据和操作数据的行为封装在一个类的内部,并且只向外部提供必要的接口,以保证数据的安全性和一致性。继承机制允许我们从已有的类中派生出新的类,新的类可以沿用基类的数据和行为,也可以自定义扩展新的数据和行为。多态是指同一函数或方法在不同情况下表现出不同的行为,可以通过虚函数和接口来实现。(本章只涉及封装这一特性,继承和多态的讲解在后续文章会推出)类和对象这一节的知识点,贯穿了整个C++的学习,深刻理解类和对象和熟练使用类和对象是后面C++学习的坚实的基础。
1 运算符
什么运算符?
运算符是用来表示某种运算(操作)的符号.
如 : + - * /
几目运算符? 表示这个运算符需要几个操作数(运算数)
单目运算符 : 该运算符只需要一个操作数, 如 : ++ , -- &
双目运算符 : 该运算符需要两个操作数, 如 : + - * /
三目运算符 : 该运算符需要三个操作数, 如 : ? :
结合性 : 决定先算哪个操作数
不知不觉,《C++面试八股文》已经更新30篇了,这是我第一次写技术博客,由于个人能力有限,出现了不少纰漏,在此向各位读者小伙伴们致歉。
为了不误导更多的小伙伴,以后会不定期的出勘误文章,请各位小伙伴留意。
在《C++面试八股文:C++中,设计一个类要注意哪些东西?》一文中,
#include <iostream>
struct Foo{};
struct Goo
{
void
由C语言到C++,这是一个即刺激又艰难的过程,说他刺激,是因为学会用C++后就不会再想用C语言,说他艰难,是因为C++是一门古老复杂的语言,很多工作多年的C++程序员都不敢说他精通C++(哈哈哈)。当然了,也别听到这些就被劝退了,C++经过了这么多年的发展,其语言的成熟度自然是有的,并且,如今世界主流的计算机语言当中依然有`C++`的身影,这就说明,C++这门语言是有他独特的风格来吸引人们的。C++的运行速度很快,是因为C++比较接近底层。这也是C++受欢迎的优点之一。有人说,学好C++再去学其他任何语言都很容易上手,但学好其他语言就不一定了。
目录前言2.1分支语句2.1.1什么是语句2.2分支语句2.2.1if语句的语法形式2.2.2悬空else问题2.2.3if书写形式的对比2.3switch语句2.3.1switch的语法形式2.3.2 switch与break的关系2.3.3 switch与default的关系前言小伙伴们端午安康吖!今天我们要开始新的一章的学习!直接开始学习叭!2.1分支语句2.1.1什么是语句在了解语句之前,
某日二师兄参加XXX科技公司的C++工程师开发岗位第30面:
面试官:什么是空指针?
二师兄:一般我们将等于0/NULL/nullptr的指针称为空指针。空指针不能被解引用,但是可以对空指针取地址。
int* p = nullptr; //空指针
*p = 42; //空指针不可以解引用
int** pp = &p //空指针可以取地址
面试官:你知道0/NULL/nullptr三
根节点有很多分支,每个分支可以再有分支,每个分支点最上层的节点可以被看作该分支的根节点,用于管理整个分支的状态信息(光照,融合,透明等),为Node类型,一般使用Group;每个分支末端会是一个叶节点,叶结点用于管理绘制体,叶结点为Geode或其继承类(Billboard)可绘制体保存有绘制信息,例如几何体,文字,像素等,绘制体由叶结点管理,必须添加到叶结点才能最终被OSG渲染到窗口显示
osgV
>?排序可谓是老生常谈了,在这里,我给大家带来一些常用的排序算法。
>?常用的排序算法有八个:**直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序(快排),归并排序,计数排序**。每一个排序算法都有其独特的思想,我们不仅要学会它的思想,还要能够在合适的场景中选出合适的排序算法。因此,这一块,要很熟练很熟练。
>?本章所有的排序均以升序为例来讲解,弄懂了升序,降序也是不在话下。
1、select诞生的原因
在上文我们提到了多客户端的时候,多台客户端发送数据到服务端的话,只能有一台客户端可以正常发送和接受数据,另外一台完全没有反应,那这个问题怎么解决呢?很多人可能第一反应想到利用多线程技术,线程多的话用线程池来维护。的确,多线程确实可以实现这个效果,但是,可能很多看见这个但是就不怎么开心了,却不知很多科学科技的进步都是这个但是引发的。但是一个多线程编程很麻烦又容易出错,二是
1.一维数组的创建和初始化1.1 数组的创建数组是一组相同类型元素的集合数组的创建方式:type_t arr_name [const_n];//type_t数组元素类型 arr_name数组名 const_n常量表达式或常量,用来指定数组的大小 [ ]基本语法形式int arr[20];
char ch[5];
double date1[20];
0 在虚拟机上(linux)运行程序的步骤
1.编写代码
后缀.c
2.编译
把我们的代码翻译成 机器能够识别的文件
gcc xxx.c -o xxx
gcc 是编译器, 用来把我们写的.c文件编译成 机器可以识别的文件(可执行文件)
xxx.c 是你的代码
-o output
xxx 是生成的可执行文件
也可以这样做
gcc xxx.c
省略后面的 -o
某日二师兄参加XXX科技公司的C++工程师开发岗位第29面:
面试官:什么是构造函数?
二师兄:构造函数是一种特殊的成员函数,用于创建和初始化类的对象。构造函数的名称与类的名称相同,并且没有返回类型。构造函数在对象被创建时自动调用。
struct Foo
{
Foo(int v):val(i){} //构造函数
private:
int val;
};
面试官:什么是默认构造函数?
题目
给定你一个长度为 $n$ 的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序,并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 $n$ 。
第二行包含 $n$ 个整数(所有整数均在 $1∼109$ 范围内),表示整个数列。
输出格式
输出共一行,包含 $n$ 个整数,表示排好序的数列。
数据范围
$1≤n≤100000$
输入样例:
5
3 1 2 4 5
输