
C与C++
文章平均质量分 54
liebecl
不断前行~
展开
-
C语言关键知识点集合
变量/函数的声明仅声明变量/函数存在于程序中的某个位置也就是后面程序会知道这个函数或者变量的类型,但不分配内存。关于定义,当我们定义变量/函数时,除了声明的作用外,它还为该变量/函数分配内存。宏定义又称为宏代换、宏替换,简称“宏”。定义数据类型:#define reg register定义数值:#define MAX 1000定义函数:#define MAX(a, b) ((a)>(b)?(a):(b)) 用于简单表达式函数,处理更快,但是无法调试。......原创 2022-08-03 19:51:32 · 786 阅读 · 1 评论 -
指针常量和常量指针概述
const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改。是指指向常量的指针,顾名思义,就是指针指向的是常量,即,它不能指向变量,它指向的内容不能被改变,不能通过指针来修改它指向的内容,但是指针自身不是常量,它自身的值可以改变,从而指向另一个常量。它指向的地址是不可改变的,但地址里的内容可以通过指针改变。//*在前,定义为指针常量。指向常量的指针,指针的地址可以变,指针指向的内容不能变。指针是一个常量,指针的地址不能变,指向的内容可以变。...原创 2022-08-02 14:34:34 · 719 阅读 · 0 评论 -
register和volatile的区别
在多线程情况下,并且多个线程对这个变量会进行频繁读写的话,那就会出现脏数据。即,如果一个线程修改了这个变量的值,但是变量新值还未及时更新到缓存或者寄存器时,另外一个线程一旦访问缓存或者寄存器,就会获取没有及时更新的脏数据。在ANSIC语言中,由于用了register,变量需要写入寄存器而不在内存中,所以利用&取址运算符是无法获取地址的,即,&取址运算符不能用于register修饰的变量。就针对编译器而言,volatile所做的就是要求变量必须保存在内存中,而不允许被编译器进行优化放入缓存或者寄存器等等。..原创 2022-07-31 00:10:27 · 441 阅读 · 0 评论 -
C++中读文件以及getline和atof函数的运用
文章目录读文件getline函数atof函数读文件一次性从某个文件中读取数据,并存入固定的vetor结构体中。文件中的数据结构为:A,B,C,DA,B,C,DA,B,C,DA,B,C,DA,B,C,Dvoid showPlanningPath(void){ string lineStr; //读取文件,以读模式打开文件 ifstream infile; infile.open("/home/mdc/MDC/lgsvl/rsc/refTrajectory.csv",ios::in)原创 2022-01-28 00:45:13 · 2381 阅读 · 0 评论 -
C++中写文件以及setprecision函数的运用
文章目录写文件问题setprecision函数的运用写文件周期性将数据写入某个固定文件中,按照固定的格式,每一行数据类型相同,都是double类型。A,B,C,DA,B,C,DA,B,C,D#include <fstream>#include <iostream>//写入文件,以写模式打开文件int main(void){ ofstream outfile; outfile.open("data.txt",ios::out|ios::app); if(out原创 2022-01-26 19:41:44 · 1392 阅读 · 0 评论 -
C++中vector的初始化和at函数以及clear函数的使用
目录vector的初始化at函数clear函数vector的初始化vector的初始化有很多,以下列举几种。vector<int> v; //定义一个vector容器,类型是int,size为0vector<int> v = {0,1,2}; //定义一个vector容器,类型是int,size为3,初始化值为0,1,2。vector<int> v(3,1); //定义一个vector容器,类型是int,size为3,全部初始化为1。at函数vecto原创 2021-12-16 17:20:07 · 2317 阅读 · 0 评论 -
for循环和auto类型
目录auto的定义auto的作用范围for语句auto的定义auto类型是C++11标准引入的说明符,用它可以让编译器替我们去分析表达式所属的类型。auto的作用声明变量时根据初始化表达式自动推断该变量的类型;声明函数时函数返回值。auto f = 3.14 //double类型的auto out = std::make_shared<HafLocation>(); //HafLocation是结构体类型范围for语句C++11新标准引入了一种更加简单的for语句,这种语原创 2021-12-10 15:57:12 · 1545 阅读 · 0 评论 -
内存管理和智能指针
目录原创 2021-11-24 13:48:18 · 867 阅读 · 0 评论 -
C++中的容器
目录容器的定义顺序容器常见顺序容器的类型vectorlistforward_listdequearraystringvector的示例定义一个结构体定义一个vector容器向容器中添加元素容器的定义一个容器就是一些特定类型对象的集合。顺序容器顺序容器为程序员提供了控制元素存储和访问顺序的能力。这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应。常见顺序容器的类型vector可变大小数组。支持快速随机访问。在尾部之外的位置插入或删除元素可能很慢。list双向链表。只支持双向顺序访问。原创 2021-11-23 11:08:31 · 191 阅读 · 0 评论 -
虚函数和纯虚函数的使用方式以及区别
虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class),而只含有虚函数的类(class)不能被称为抽象类(abstract class)。虚函数可以被直接使用,也可以被子类(sub class)重载以后以多态的形式调用,而纯虚函数必须在子类(sub class)中实现该函数才可以使用,因为纯虚函数在基类(base class)只有声明而没有定义。虚函数和纯虚函数都可以在子类(sub class)中被重载,以多态的形式被调用。虚.原创 2021-11-03 15:00:00 · 343 阅读 · 0 评论 -
C++类中的各种函数
目录成员函数构造函数和析构函数虚函数友元函数内联函数成员函数成员函数是定义为类的一部分的函数,有时也被称为方法。类的成员函数可以把定义和原型写在类的内部,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。类的成员函数的定义可以在类的内部,也可以在类的外部。成员函数定义在类的内部class Box{ public: double length; // 长度 double breadth;原创 2021-11-03 14:48:42 · 2896 阅读 · 0 评论 -
C++中的类访问修饰符
目录什么是类访问修饰符?类访问修饰符的分类什么是类访问修饰符?数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是原创 2021-11-02 16:38:02 · 544 阅读 · 0 评论 -
C++中的继承
目录为什么要用继承?继承的定义为什么要用继承?面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。继承代表了 is a 关系。例如,哺乳动物是动物,狗是哺乳动物,因此,狗是动物,等等。继承的定义通过继承联系在一起的类构成一种层次关系,通常原创 2021-11-02 00:13:49 · 96 阅读 · 0 评论 -
C++中的类模板
目录索引为什么使用模板?类模板简介定义一个类模板模板外定义模板里面的函数类模板的使用类模板的继承为什么使用模板?模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是C++中泛编程的基础,一个模板就是一个创建类或函数的蓝图或者公司。类模板简介定义一个类模板类模板以关键字template开始,后面跟模板参数列表。template <class T1,class T2>class A{ public: T2 add(T1 x, T1 y );}在这原创 2021-10-25 15:36:13 · 590 阅读 · 0 评论 -
C++中的命名空间
目录为什么要使用命名空间?命名空间的含义命名空间的定义标准库命名空间std普通命名空间的定义命名空间的使用命名空间可以是不连续的命名空间的嵌套命名空间的别名为什么要使用命名空间?大型程序往往会使用多个独立开发的库,这些库会定义大量的全局名字,例如类、函数、变量以及模板。为避免名字命名发生污染和冲突,就引入了命名空间。命名空间的含义命名空间是为了防止名字冲突提供了更加可控的机制。命名空间分割了全局的命名空间,其中每一个命名空间就是一个作用域。通常在某个命名空间中定义库的名字,库的作者或者用户,可以避免原创 2021-10-23 16:25:17 · 878 阅读 · 0 评论 -
函数的重载
目录定义示例注意事项定义函数重载:如果同一作用域内的几个函数名字相同但形参列表不同,则称之为重载函数。示例void print(int a){ cout << " 整数为" << a <<endl}void print(double a){ cout << " 小数为" << a <<endl}void print(char a[]){ cout << " 字符串为" << a原创 2021-10-23 11:33:04 · 264 阅读 · 0 评论 -
atoi函数的使用
atoi()函数的功能:将字符串转换成整型数;atoi()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负号才开始做转换,而再遇到非数字或字符串时(’\0’)才结束转化,并将结果返回(返回转换后的整型数)。n=atoi(a),a是一个字符串数组。——————2019.06.1922:38...原创 2019-06-19 22:39:56 · 9232 阅读 · 0 评论 -
typedef的用法
与#define的区别与#define不同,typedef给出的符号名称仅限于对类型,而不是对值。typedef的解释由编译器,而不是预处理器执行。虽然它的范围有限,但是在其受限范围内,typedef比#define更加灵活。主要用法定义数据类型typedef unsigned char u8;定义结构体类型typedef struct complex{ float...原创 2019-07-07 18:52:51 · 1877 阅读 · 0 评论 -
数组的定义与初始化
什么是数组?人们借助计算机来记录每月的开支、日降水量、季度销售额;企业可以借助计算机来管理员工薪水、仓库存货清单等等。采用数组可以有效便捷地处理各种类型的数据。原创 2019-08-17 18:25:17 · 2620 阅读 · 0 评论 -
结构体的定义与初始化
1.什么是结构体?结构体也是一种数据形式,里面可以保存含有字符、字符串、数字等各种信息,并且分别保存起来,每一种数据类型是一种成员或者字段。原创 2019-08-28 23:05:57 · 4304 阅读 · 0 评论 -
C++和类
一、C++类的定义 C++中使用关键字 class 来定义类, 其基本形式如下:class 类名{ public: //行为或属性 protected: //行为或属性 private: //行为或属性};示例: 定义一个点(Point)类, 具有以下属性和方法: ■ 属性: x坐标, y坐标 ■ 方转载 2017-11-06 23:41:59 · 342 阅读 · 0 评论 -
main(int argc,char **argv)参数解析
我们经常用的main函数都是不带参数的,因此main后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。main(int argc,char **argv)argv为指针的指针argc为整数char **argv or: char *argv[ ] or: char a...原创 2019-06-19 22:36:55 · 1044 阅读 · 0 评论 -
int *a和(int *)a的区别
(int *)a将指针变量a强制转换为整型指针,说明a一般不是一个整型指针,也可以是个整型指针。int *a定义一个整型指针变量a。原创 2019-06-19 22:31:32 · 20720 阅读 · 2 评论 -
条件编译的用法
在很多大型的项目工程中,为了方便调试和代码的区分,很多时候会使用条件编译。(1)#ifdef、#else、#endif指令#ifdef MAVIS #include "horse.h" //如果已经用#define 定义了MAVIS,则执行这里的命令 #define STABLES 5#else #include "cow.h" //如果已经没有用#define 定义了MAVIS,...原创 2018-12-06 23:12:40 · 2119 阅读 · 4 评论 -
位字段的用法
在代码中看到了位字段相关的东西,特此做下笔记。位字段是指信息在存储时,并不需要占用一个完整的字节,而只需要占其中几个或者一个二进制。这时候,可采用为字段,节省空间和方便处理。用法定义struct box_props{ unsigned int Red :1; //占用一位 unsigned int Blue :3; //占用三位 unsigend int :4 //...原创 2018-11-21 22:49:28 · 954 阅读 · 0 评论 -
关键字static的作用
今天在编码的过程中,出现了一个问题。在A.c的文件中定义了一个static的int型全局变量,想要在B.c中调用,发现编译错误,大概是没有理解static的含义。static的作用如下: (1)作用域:具有”隐藏”作用 例如: 在A.c中static int a=0;在B.c中extern int b; //会出现编译错误(2)静态储存:只初始化一次int fu原创 2018-01-18 23:47:26 · 204 阅读 · 0 评论 -
while与break、continue、return以及goto的使用
目前在我们项目中用到的while语句还比较多,现在就来总结下while与break、continue、return以及goto一起使用的案例。(1)while与break:直接跳出整个循环体while(flag>5){ if(flag == 4){ break; } printf("flag = %d.\n",flag)}当flag=4,直接跳出whil原创 2017-07-26 22:38:05 · 20920 阅读 · 1 评论 -
将一个三位数的位置交换顺序
输入一个三位数,将其位置交换顺序,代码如下。 #include原创 2017-09-22 23:38:29 · 5602 阅读 · 0 评论 -
函数指针与状态机的用法
在很多大型的集成系统中都会用到状态机来跳转到指定的函数,而状态机的使用过程中就离不开函数指针、结构体数组等等,下面就介绍下函数指针与状态机的用法。结构体数组平时我们接触到的数组的元素都是数字或者字符,一般称为整型数组或者字符型数组,而结构体数组就是数组的元素是结构体,其本质上仍然是一个数组。函数指针函数指针,顾名思义,是一个指针,是一个指向函数的指针。正如指针可以指向整型变量、字符型变量以及数组,原创 2017-08-05 14:47:50 · 2323 阅读 · 0 评论 -
两个.c文件访问同一个全局变量的用法
上周编程的时候犯了一个错误,以为在一个头文件里面定义一个全局变量,然后两个.c文件包含这个头文件,这两个.c文件就可以同时访问。结果编译报错,理由是重复定义。下面就介绍两种方法,同一个全局变量被两个.c文件访问。(1)不用头文件在file_a.c中定义一个全局变量:int flag ; 在file_b.c中:extern int falg;即可。(2)利用头文件在file_a.原创 2017-07-29 22:56:09 · 7107 阅读 · 2 评论 -
预处理器的粘合剂:##运算符
和#运算符一样,##运算符可以用于类函数宏的替代部分。另外,##还可用于类对象宏的替换部分。这个运算符把两个语言符号组合成单个语言符号。例如,可以定义如下的宏:#define XNAME(n) x ## n//这样,下面的宏调用XNAME(4)//会展开成下列形式x4则##运算符起到了粘合的作用。——————2018.12.0921:56...原创 2018-12-09 21:56:25 · 446 阅读 · 0 评论 -
CPU内部看门狗,外部看门狗以及软件看门狗
uboot启动时,当将cpu运行模式设置为管理模式后,就要关闭看门狗了,那么看门狗是干什么的呢?狗狗是我们的好朋友,有时候,一条好狗狗能够救主人的性命,“看门狗”是cpu的“好朋友”,它也能够在cpu出状况的时候把它救活。看门狗其实就是一个可以在一定时间内被复位的计数器,当看门狗启动后,计数器开始自动计数,经过一定时间,cpu就会将这个计数器复位,如果没有被复位,计数器溢出就会对CPU产生一个...转载 2018-12-11 23:42:28 · 22718 阅读 · 4 评论 -
字节序:MSB和LSB
MSB: 最高有效位 (大端模式) Most Significant BitLSB: 最低有效位 (小端模式) Least Significant Bit在很多协议对于数据的传递中存在这大小端模式,所以接收方或者解析方一定要清楚数据的组合模式,是大端还是小端,以免出现数据解析错误。大端模式:MSB Fisrt低地址——&gt;高地址25 78 组合成 0x2578小端模式:LSB Fi...原创 2019-01-23 19:42:33 · 3268 阅读 · 0 评论 -
*(volatile unsigned long*)的用法
volatile用法原创 2019-06-19 22:28:55 · 1236 阅读 · 0 评论 -
Microsoft Visual Studio 2015新建工程
1.新建工程2.生成空项目3.添加文件4.添加.c文件5.编程6.Debug————————2019.06.0323:03原创 2019-06-03 23:04:06 · 1152 阅读 · 0 评论 -
对结构体的数组成员进行初始化
数组作为结构体成员的初始化示例:#include <stdio.h>#include <stdlib.h>typedef struct Month{ unsigned char a[3]; unsigned char b[3];}p_month;void main(){ p_month temp = {{1,2},{3,4,5}}; printf...原创 2019-05-14 23:19:24 · 7532 阅读 · 0 评论 -
ACSII码表
ASCII(American Standard Code for Information Interchange:美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的信息交换标准,并等同于国际标准ISO/IEC 646。十进制十六进制字符数字字符–-480x300490x311500x3...原创 2019-05-13 23:03:37 · 2610 阅读 · 0 评论 -
unsigned char型整数
在一些大型的公司编码项目中,喜欢用unsigned char来定义部分整数。原因有两点:1.char类型本来是用来存储字母和字符的,但是在技术实现上char却是整数类型,这是因为char类型实际存储的是整数而不是字母,只不过用ASCII码进行了转换。也就是说char型实际就是整形。2.占用存储空间小。在一些MCU上内存空间有限,需要节省一些空间,用char来定义整形就是一个不错的选择。而ch...原创 2019-01-09 22:49:49 · 14213 阅读 · 0 评论 -
#define宏定义陷阱之替代
分享一个宏定义的陷阱,其实#define起到的只是替代的作用。#include <stdio.h>#include <stdlib.h># define MAX 6-3void main(){ /* in a = 6-3*6-3 先算乘法再算减法 */ int a = MAX*MAX; printf("a = %d.\n", a); syst...原创 2019-01-09 22:31:08 · 520 阅读 · 0 评论 -
宏定义时对整数进行数据类型定义
最近看代码时,发现宏定义时就对整数进行了数据类型定义,其实也是对宏定义的数据类型进行了定义。(1)定义为int型#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;# define MAX ((int)4)void main(){ printf("MAX = %d.\n", sizeof(MAX)); system("paus原创 2019-01-09 22:20:52 · 10770 阅读 · 0 评论