
C/C++
文章平均质量分 80
菜菜X
除了菜,一无所有
展开
-
宏:va_list、## 、…、arg …、##__VAL_ARGS
C宏的使用系列之一(希望后面继续写)原创 2022-08-27 09:42:53 · 683 阅读 · 0 评论 -
类的成员函数和数据成员分别存在哪里,类大小的计算
类的成员函数存放在代码区,数据成员分为静态变量和非静态变量,静态变量在类定义的时候,就分配好了,存放在数据区,然后非静态变量时在构造对象的时候,存放在堆栈中。类的大小实际上只是数据部分的大小(包括虚函数指针),成员函数不占用类的大小。https://blog.youkuaiyun.com/zhishihudiebuyuanyi/article/details/78299814https://blog.youkuaiyun.com/fuzhongmin05/article/details/59112081A 什么都没有的.原创 2020-12-27 17:16:43 · 3475 阅读 · 1 评论 -
C++的多态慢慢学
VersionSDescriptionDateByV1CFirst Version2020-12-27AYZPC―― Create,> A—— Add,> M—— Modify,> D—— Delete。前言C++的三大特性,多态,慢慢记。一 简单描述下慢慢改多态的实现主要分为静态多态和动态多态,静态多态主要是重载,在编译的时候就已经确定;动态多态是用虚函数机制实现的,在运行期间动态绑定。举个例子:一个父类类型的指针指向一个子类对象...原创 2020-12-27 17:10:03 · 253 阅读 · 0 评论 -
C++的inline
前言我也不知道为什么要记录inline,也许是强迫症吧一 正文1.1 为何要inline为什么会引入inline来修饰函数?因为,大多数的机器上,调用函数都要做很多工作:调用前要先保存寄存器,并在返回时恢复,复制实参,程序还必须转向一个新位置。有人想要更快一点,让调用函数不做那么多工作,于是,就提出了inline来修饰函数,这就是内联函数inline了,之所以,叫它内联函数,是因为…别人的话:执行C++中支持内联函数,其目的是为了提高函数的执行效率,用关键字 inline 放在函数定义(原创 2020-12-27 16:08:40 · 236 阅读 · 0 评论 -
C++中源码到可执行文件的过程
前言面试中常见的一个问题,同学,请你介绍下,C++源码到可执行文件的一个简单过程。整体流程对于C++源文件,从文本到可执行文件一般需要四个过程:预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件一 预处理阶段(.c—.i)主要处理源代码文原创 2020-12-27 15:53:19 · 1538 阅读 · 0 评论 -
内存大小端问题
前言在笔试面试中,内存大小端问题很常见,虽记录一下,方便日后查询正文下面四个选项是四个整数在内存中的存储情况,请选择其中最大的一个。(选择题)ABCDBig-endian低地址 高地址12 34 56 78Big-endian低地址 高地址56 78 12 34Little-endian低地址 高地址34 56 78 12Little-endian低地址 高地址78 12 34 56解答:大端小端问题:所谓的大端模式(BE big-endian),是指原创 2020-12-27 15:34:17 · 630 阅读 · 0 评论 -
C++的继承慢慢记
VersionSDescriptionDateByV1CFirst Version2020-12-27AYZPC―― Create,A—— Add,M—— Modify,D—— Delete。前言因为想学好C++,所以要学好继承,继承有好多,一下记不完,故,慢慢记录一 继承定义附录A 菱形继承参考文献[1]的大佬记录的很详细。定义:Base A B D调用不明确的问题解决:域限定虚继承虚继承就是,A,B在继承时,public...原创 2020-12-27 15:27:49 · 182 阅读 · 0 评论 -
关键字volatile小记录
前言C/C++中有个关键字volatile,它是什么意思呢?有时候记得,有时候又不记得,要去查,故,小记录一下,以后查自己的。一 正文volatile表示一个变量也许会被后台程序改变,关键字 volatile 是与 const 绝对对立的。它指示一个变量也许会被某种方式修改,这种方式按照正常程序流程分析是无法预知的(例如,一个变量也许会被一个中断服务程序所修改)。这个关键字使用下列语法定义:volatile data-definition变量如果加了 volatile 修饰,则会从内存重新装载原创 2020-12-27 12:13:30 · 514 阅读 · 0 评论 -
C++中new对象后面括号若隐若现(加不加!)
前言在学数据结构的树时,看以前记得笔记,有一个地方有疑问typedef struct BNode(){ int data; struct BNode * Lson; struct BNode * Rson;} BNode, *Bptr;BNode * p = new BNode;BNode * p2 = new BNode();new BNode后面加不加括号的区别在哪里?正文1.1 资料new对象后面加与不加括号的区别:(1)加括号若括号为空,即无实参项,那么理解为调原创 2020-12-22 20:56:03 · 1247 阅读 · 2 评论 -
简简单单static
前言static,静态的,在C/C++中经常喜欢问它的作用,那么,应该简简单单的把它记录一下一 正文1.1 C语言中在C语言中,static有下3个作用:static修饰全局变量:被修饰的全局变量的作用域范围限定为本源文件,另外的源文件不能通过extern关键词来使用这个全局变量。(该变量存放在静态变量区)static修饰局部变量:a)被修饰的局部变量只能被初始化一次。b)被修饰的局部变量的存储空间发生了改变,不再存储在栈中,而是存储在数据段中。static修饰函数:被修饰的函数作用域范围限原创 2020-12-04 20:22:12 · 212 阅读 · 2 评论 -
const int *p 和int const *p和int * const p,总有人搞不懂,对吧
前言const int *p和int const *p和int * const p,这三个好基友,总有人认不清的,对吧?好,我就认不清。嗯,总结一下,方便以后忘了怎么回事的回来看看一 正文1.1 问题描述首先,const int *p和int const *p是一模一样的,没区别, 一个意思,随你想怎么写。下面以const int *p为例。然后,就是区分const int *p1和int const *p2。1.2 结论int const *p1; //指向整型常量的指针,表示*p1的值原创 2020-12-04 20:12:38 · 4726 阅读 · 3 评论 -
程序语言中花括号写法——手写or手敲代码
前言在手写一本编程参考书的程序代码的时候,突然发现,花括号写法可以适当变一变嘛!正文在草稿纸上手写代码的时候,花括号可以这样写if (name == "niubi") { // body}草稿纸上这样写,好处:省草稿纸写起来,看起来,自己觉得更简约在手敲代码的时候,花括号这样写if (name == "niubi"){ //body}在电脑上手敲代码的时候,这样敲,看起来更清楚明白。电脑上看起来更清楚明白思考应该统一下风格吧???[2020-11-12].原创 2020-11-12 21:36:25 · 3059 阅读 · 1 评论 -
sizeof计算占据内存全解
前言sizeof是C语言里面的一个关键字,用于计算占据多少字节,如sizeof(int) = 4,int类型占据4个字节。sizeof做笔试和面试的时候出现的频率也相当高,总结一下。一 数据类型占据内存二 测数组// 32位机#include<stdio.h>int main(){ int a[5]={1,2,3,4,5}; printf(“sizeof数组名=%d\n”,sizeof(a)); printf(“sizeof *数组名=%d\n”,sizeof(*a));原创 2020-11-06 20:30:48 · 5453 阅读 · 0 评论 -
变量存储内存问题
前言程序代码中各个变量都存储在内存的哪里呢?这是一个非常有趣的问题结论堆:堆允许程序在运行时动态地申请某个大小的内存。一般由程序员分配释放;(使用malloc/new)栈:由编译器自动分配释放,存放函数的参数值,局部变量等值;静态数据区(data bss) [不全面,全面的看下文]静态存储区:一定会存在且不会消失,这样的数据包括常量、常变量(const 变量)、静态变量、全局变量等;常量存储区:常量占用内存,只读状态,决不可修改,常量字符串就是放在这里的。一 基本概念1.1 变原创 2020-11-06 18:15:38 · 511 阅读 · 0 评论 -
malloc学习
VersionSDescriptionDateByV1CFirst Version2020-11-6AYZPC―― Create,A—— Add,M—— Modify,D—— Delete。前言在之前面试过程中,面试官总喜欢问malloc相关的问题,当然问的时候一定会带着它的家人free和他的兄弟new、弟妹delete。面试官最喜欢问malloc和new的区别啦然后malloc的底层部分也有一定的兴趣想了解一下,但是兴趣不足,因此目前[2020...原创 2020-11-06 15:51:29 · 740 阅读 · 0 评论 -
C语言优先级与结合性表
前言一直想总结下C语言的优先级,好方便查询,那就总结下了。一 表二 优先级算术运算符 > 关系运算符 > 逻辑运算符 > 赋值运算符。逻辑运算符中“逻辑非 !”除外。三 结合性3.1 从右到左:3个2 单目运算符:- (类型) ++ -- * & ! ~ sizeof13 三目运算符:条件运算符?:14 赋值运算符:= /= *= %= += -= <<= >>= &= ^= |=3.2 规律:三目运算符,是从右到左双目运原创 2020-09-18 09:47:07 · 1235 阅读 · 1 评论 -
16/32位数,表示范围
前言XX位二进制数,表示的数的范围是多少呢,疑惑。一 16位数,表示范围。16位无符号二进制数的表示范围是0~ 65535;而有符号16位二进制的表示范围是-32768~+32767。之所以是65535,是因为0也是一位,0-65535就是65536个了,即2^16有符号就是有一位是符号位,当符号位为0时,有15位表示数,0-32767共32768个。当符号位为1时,-32768二 32位补码表示的数,1位符号位,数的表示范围因为十进制带符号,所以有一位符号位,数值范围是31位最大正整数 2原创 2020-09-10 21:25:15 · 7085 阅读 · 0 评论 -
二维数组,看的清一些就好
一 前言昨天做了CVTE的嵌入式笔试卷子,发现,二维数组的题目好多。头皮微酥。今天总结下这个二维数组到底是个啥。写少点。二 结论二维数组,从本质上去看,就是:一个二维数组,它的每一个数组元素都是一个一维数组,实际上,去理解:二级指针二维数组,实际上就是二级指针的应用啊。用二级指针的思想去考虑二维数组的访问,基本没错了,一切都讲的通了。三 正文少写点,看着细品。int a[3][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11} };int a[0原创 2020-09-08 12:55:22 · 352 阅读 · 0 评论 -
什么是面向对象的程序设计
答:面向对象 = 类 + 类 + … + 类类是什么:数据结构和操作该数据结构的函数捆绑在一起来源:https://www.icourse163.org/course/PKU-1002029030原创 2020-07-22 08:28:59 · 276 阅读 · 0 评论 -
C函数的参数中有取地址符&
一 前言之前在函数中看到函数的形参中存在取地址符&,一直不知道什么意思。然后又一次碰到了,就把它搞定。void partition(int a[], int s, int t, int &k) //划分函数{ int i, j, x; x = a[s]; //取划分元素 i = s; j = t; //扫描指针初值 do // 循环地进行划分 { while ( (a[j]>=x) && (i<j)原创 2020-07-08 11:44:32 · 9762 阅读 · 1 评论