![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c/c++
文章平均质量分 54
LittleAshes
这个作者很懒,什么都没留下…
展开
-
对递归的理解
阅读递归最容易的方法不是纠缠于它的执行过程,而是相信递归函数会顺利完成它的任务。如果你的每个步骤正确无误,你的限制条件设置正确,并且每次调用之后更接近限制条件,递归函数总是能够正确的完成任务。 感觉递归内部也隐含这一种哲学思想。因为按照一般的思维,只有过程正确,才能确保结果正确。但是在递归完成之前,过程还没有经过检验,那么结果就应该是不确定的。但是,只要我们相信最后结果是正确的,并用这个结果修正过程,那么最终结果它就是正确的。打个不恰当的比喻,两个思想就类似于唯物主义和唯心主义。用严谨的过程最后得到原创 2021-04-24 12:16:10 · 211 阅读 · 0 评论 -
C++使用注意事项
vector<string> v 中加入一个空字符串,v的大小也会增加1。 vector<string> v; //v.size() == 0 string word; v.push_back(word); //v.size() == 1,不过该元素为空。也就是说,虽然为空,但确实存在。原创 2021-03-24 23:10:40 · 126 阅读 · 0 评论 -
STL中常用数据结构方法以及常用算法
algorithmswap();max();min();find();unique();reverse();sort();stable_sort();to_string()isalpha();islower();isupper();isdigit();isalnum();tolower();toupper();String ss.length()s.push_back();s.pop_back();s.begin() – s.end()s.empty();s.s原创 2021-03-16 11:13:48 · 250 阅读 · 0 评论 -
浅拷贝、深拷贝
浅拷贝——2个程序单元(例如2个函数)是通过拷贝他们所共享的数据的指针来工作,真正要访问的数据并没有被拷贝。深拷贝——被访问的数据被拷贝了,在每个单元中都有自己的一份,对目标数据的操作相互不受影响。/* * 深拷贝,变量默认拷贝的是对象本身 */ int a = 3; int b = a; //b=3 a = 5; //a=5,b=3上边代码中,a的地址为0x22fe4c,b的地址为0x22fe48.且都为int变量,内部直接存储数值,所以改变a之后,对b没有影响。 int c =原创 2020-06-03 09:02:16 · 110 阅读 · 0 评论 -
预定义宏__FILE__、__LINE__、__func__等
C语言中,FILE、LINE、__func__常用于logout,打trace,debug调试。这些是预置在编译器中的宏,并不包含于任何头文知件,所以直接调用即可,不需要做任何其它操作。__FILE__指示当前文件名,表示为字符串常量。__LINE__指示运行当前文件的行数,表示为十进制整数常量。__func__指示当前函数名,表示为字符串常量。#include <stdio.h>void test(void){ printf("%s--%d--%s\n",__func__,原创 2020-05-18 20:54:29 · 556 阅读 · 0 评论 -
【链表】单向链表的两种创建方法(头插法和尾插法)
链表的基本结构是节点。节点主要包括数据和指向下一个节点的指针,链表就是由多个节点链接而成。单向链表的创建主要有两种方法,头插法和尾插法。首先完成节点定义typedef struct Node *PtrToNode;struct Node { int Data; /* 存储节点数据 */ PtrToNode Next; /* 指向下一个节点的指针 */};typede...原创 2020-03-20 18:16:17 · 773 阅读 · 0 评论 -
二级指针、数组指针、二维数组、指针数组作为函数形参时可传入的实参
传参规则:a.当二级指针作为函数形参时,能作为函数实参的是二级指针,指针数组,一级指针的地址b.当数组指针作为函数形参时,能作为函数实参的是二维数组,数组指针c.当二维数组作为函数形参时,能作为函数实参的是二维数组,数组指针d.当指针数组作为函数形参时,能作为函数实参的是指针数组,二级指针,一级指针的地址实例验证:#include <stdio.h>#includ...转载 2020-03-14 21:22:36 · 700 阅读 · 0 评论 -
c++ 中vector的应用
一、向量的介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版,是可变长的动态数组,支持随机访问迭代器,所有 STL 算法都能对 vector 进行操作。 在使用它时, 需要...转载 2020-03-11 23:26:39 · 485 阅读 · 0 评论 -
C++中的构造函数
假设有类Timeclass Time{private: int year; int month; int day;public: Time(); //默认构造函数 Time(int y,int m = 1,int d = 1); //有参构造函数 ,默认两个参数 void show(); virtual ~Time(); //虚拟析构函数 };其构造...原创 2019-12-11 21:25:01 · 58 阅读 · 0 评论 -
C++中的引用
引用,就是已定义变量的别名。用途:用作函数的形参,通过将引用变量用作函数参数,函数将使用原始数据,而不是其拷贝。这样,除指针外,引用也为函数处理大型结构提供了一种非常方便的途径。如果想让函数使用引用传递数据,同时又不对这些数据进行修改,则应使用常量引用。int refcube(const int &a)...原创 2019-11-26 20:36:55 · 68 阅读 · 0 评论 -
C++中文件读写操作
头文件:#include文件I/O和控制台I/O基本一致,只不过一个输出到屏幕,一个输出到特定文件中。所以写文件和cout基本一致,读文件和cin基本一致。注意文件指针的位置...原创 2019-11-24 18:09:43 · 101 阅读 · 0 评论 -
位字段
位字段(bit field),是一个signed int 或unsigned int 中一组相邻的位(c99还允许使用Bool类型位字段)。位字段由一个结构声明建立,该结构声明为每个字段提供标签,并决定字段的宽度。一个重要的机器依赖性是将字段放置到一个int总的顺序。在有些机器上,这个顺序是从左向右,在另一些机器上顺序是从右向左。不同的机器在两个字段边界的位置上也有区别。因此,位字段往往难以移植...原创 2019-11-22 11:43:53 · 209 阅读 · 0 评论 -
C++中的string类
头文件#includestring 对象和数组之间的主要区别是,可以将string对象声明为简单变量,而不是数组,同事也更方便,更安全。但string对象的使用方式与字符数组相同。赋值可以将一个string对象赋值给另一个string对象。string str1;string str2 = "panther";str1 = str2;合并可以使用操作符+将两个string对象合并...原创 2019-11-21 21:51:27 · 86 阅读 · 0 评论 -
空指针和野指针
int main(){ int *pt = NULL; int a = 9,b = 10; *pt = b; //报错,段错误 printf("%d\n",*pt); return 0;}没有初始化或者初始化为NULL的指针,第一次解引用时会报错。因为该指针此时指向的地址空间是随机的,很有可能不能访问;或者指向NULL此时更不能解引用。*pt = b执行顺序是先解引用,...原创 2019-11-18 10:30:28 · 70 阅读 · 0 评论 -
C/C++ 内存分区
生命周期:变量在内存中保留的时间。作用域(scope) 包括代码块作用域、函数原型作用域和文件作用域。堆: 需要程序员手动申请和释放的内存段(malloc 和free)。栈: 就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间...原创 2019-11-09 19:53:19 · 117 阅读 · 0 评论 -
挂起、阻塞、睡眠和忙等待
挂起就是由于种种原因释放CPU; 阻塞等待和忙等待的最大区别是是否消耗cpu。阻塞等待的时候,已经被挂起,所以是不消耗cpu的,属于阻塞挂起。 key=OSQPend((OS_Q* )&KEY_Msg, (OS_TICK )0, (OS_OPT )OS_OPT_PEND_BLOCKING, //阻塞方式等待消息队列...原创 2019-10-18 16:07:02 · 1329 阅读 · 1 评论 -
do{...}while(0)妙用
宏定义中使用在宏定义中使用do{…}while(0),可以帮助定义复杂的宏以避免错误例子加入要定义一个宏#define SAFE_FREE(p) do{free(p);p=NULL}while(0)去掉do{…}while(0},变为#define SAFE_FREE(p) free(p);p=NULL;加入运行代码如下:If(NULL!=p) SAFE_FREE(p)el...转载 2019-10-16 12:18:06 · 98 阅读 · 0 评论 -
typedef的两种用法
typedef用法起别名(双参)用法:typedef 原变量类型 别名用typedef起别名我们比较熟悉,利用typedef给原变量起个别名,简化代码和方便跨平台移植。typedef struct str1{ int a; int b; }MY_TYPE; //直接用MY_TYPE来表示结构体 struct str1typedef unsigned ...原创 2019-10-16 11:29:50 · 331 阅读 · 0 评论 -
可重入函数和不可重入函数
标题原创 2019-10-14 21:16:37 · 191 阅读 · 0 评论 -
【C/C++】日常学习7
1. 输入\输出流操作1. 输入\输出流操作读取字符串的不同操作cin:遇到空格、回车符就停止读取,空格、回车符是分隔符,不能读取空格或回车符cin.get():遇到终止符号停止读取(默认为回车符),能够 读取空格,但流指针指向了终止字符。cin.getline():遇到终止符停止读取(默认为回车符),能够读取空格,但流指针指向了终止字符后一个字符cin.get (), cin.get...原创 2019-06-22 21:30:55 · 332 阅读 · 0 评论 -
【C/C++】日常学习5
“const char *” 类型的值不能用于初始化 “char *” 类型的实体的问题在VS2017中编写 char *str = "dlkjfdjlj";会报错:“const char *” 类型的值不能用于初始化 “char *” 类型的实体的问题解决办法:右键项目->属性->C/C+±>语言->符合模式:选择否...原创 2019-06-08 20:38:32 · 606 阅读 · 0 评论 -
【C/C++】String类及其常用成员函数、
1. c++中string类及其常用函数1. c++中string类及其常用函数 string text1{ "Heavy rains are pushing water levels beyond the limit." }; //用string类来定义字符串 string text2, text3; int k; text2 = "Sluice gates at Three Gor...原创 2019-05-26 20:00:45 · 226 阅读 · 0 评论 -
【C/C++】运算符优先级、函数指针、结构体形参
四、运算符优先级与结合性容易出错的优先级问题五、函数指针与指针函数指针函数——返回值类型为指针的函数C语言中一般的函数类型为int fun(int x,int y);这个函数应该都很熟悉,(x,y)是函数形参,fun为函数名,返回一个int形数据int* fun(int x,int y);上面这个形式值多了一个*,同样的(x,y)是函数形参,fun为函数名,...原创 2019-05-12 11:05:22 · 344 阅读 · 0 评论 -
【C/C++】scanf()和scanf_s()区别、字符串操作函数
scanf()和scanf_s()区别很多带“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素。scanf_s()是scanf()的安全版本,例如使用scanf()格式为scanf("%s",&a);则使用scanf_s()格式为scanf("%s",&a,num),其中num为为a数组分配的长度;ANSI C中没有scanf_s(),...原创 2019-04-27 12:35:16 · 1765 阅读 · 0 评论 -
【C/C++】结构体对齐、四舍五入计算、枚举使用等
C语言中改变结构体的对齐方式1. sizeof()与strlen()区别(1) sizeof是C/C++中的一个运算符,其作用是返回一个对象或者类型在内存中所占用的字节数。sizeof不能返回动态地被分配的数组的大小。sizeof在编译期完成。(2) strlen是C语言中的库函数,所在头文件为#include <string.h>其函数原型为*unsigned int strl...原创 2019-05-18 09:54:39 · 182 阅读 · 0 评论 -
【C/C++】子类继承方法、多态、虚函数、运算符重载
1. 转义字符1. 转义字符字符含义ASCII码值(十进制)\a响铃007\b退格(BS) ,将当前位置移到前一列008\n换行(LF) ,将当前位置移到下一行开头010\r回车(CR) ,将当前位置移到本行开头013\t水平制表(HT) (跳到下一个TAB位置)009...原创 2019-06-17 21:31:39 · 436 阅读 · 0 评论 -
【C/C++】c语言中数值计算范围注意事项
前几天用到这个式子 powerCosum = (abs(iqactual_filter)) * KeMotor * speedinrpm_abs_filte * 658/600000; 来计算功率powerCosum——s16,signed short int范围(0-800)iqactual_filter——s16,signed short int,范围(0-20)KeMotor—...原创 2019-06-09 19:43:28 · 885 阅读 · 0 评论 -
【C++】类注意事项
类的定义格式 class <类名>{private: //私有成员<数据成员说明语句>;<函数成员说明语句>;public: //公有成员<数据成员说明语句>;<函数成员说明语句>;protected: //保护成员<数据成员说明语句>;<函数成员说明语句>;};类中函数成员的定义(...原创 2019-06-10 21:46:08 · 177 阅读 · 0 评论 -
变长数组和动态内存分配
变长数组C99中支持变长数组,即支持数组在定义时以一个变量来声明长度; int i; int n; scanf("%d",&n); int arrat[n]; //用 一个变量来声明数组长度 for(i=0;i<n;i++) { arrat[i]=i+1; }变长数组并不是所有编译器都支持的,部分支持C99的编译器也去掉了可变数组的功能变长数组是在...原创 2019-06-17 22:55:15 · 1122 阅读 · 0 评论 -
数组强制转化为结构体指针
下午相好好看看同事写的那个协议,毕竟去年自己写的像坨*。发现有个把数组强制转化为结构体指针,这是什么操作??未完待续原创 2019-05-29 21:57:26 · 4187 阅读 · 0 评论 -
读书笔记、_attribute_
32位系统最大支持4GB内存指针的值(虚拟地址值)使用一个机器字的大小来存储。也就是说,对于一个机器字为w位的电脑而言,它的虚拟地址空间是0~2w - 1 ,程序最多能访问2w个字节。这就是为什么xp这种32位系统最大支持4GB内存的原因。浅拷贝、深拷贝浅拷贝——2个程序单元(例如2个函数)是通过拷贝他们所共享的数据的指针来工作,真正要访问的数据并没有被拷贝。深拷贝——被访问的数据被拷贝了...原创 2019-07-10 14:04:54 · 91 阅读 · 0 评论 -
动态内存分配、释放和内存泄露
List item原创 2019-08-02 12:31:07 · 407 阅读 · 0 评论 -
数组元素首地址和数组首地址区别
int main(){ int arr[10] = {0}; printf("数组元素首地址 :%d\n",arr); //数组元素首地址 2293280 printf("数组首地址 :%d\n",&arr); //数组首地址 2293280 printf("数组元素首地址+1 :%d\n",arr+1); //数组元素首地址 2293284 printf("...原创 2019-09-18 18:27:34 · 5472 阅读 · 0 评论 -
C库宏
offsetof()C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designator 给定的,结构的名称是在 type 中给定的。#include <stddef.h>#include <stdio.h>struct...原创 2019-09-21 20:33:36 · 138 阅读 · 0 评论 -
字符串常量、char数组、char指针、字符串数组
1. 字符串常量(字符串文字)字符串常量,如 " linux “,” hello world "等,以’\0’字符作为结尾符。用作右值(只读)。字符串常量属于静态存储类(static storage),静态存储是指如果在一个函数中使用字符串常量,即使是多次调用了这个函数,该字符串在程序的这个运行过程中只存储一份。整个引号中的内容作为指向该字符串位置的指针。这一点与把数组名作为指向数组存储位置的指...原创 2019-09-22 16:07:45 · 1276 阅读 · 1 评论 -
【C/C++】const用法总结
变量主要有作用域、生存期和操作权限。const 主要是限制变量的作用权限。修饰变量修饰变量表明该变量为常量,无法修改。const int N=100;const double pai=3.1415926;N=1; //错误,无法修改pai=3.14; //错误,无法修改cout<<N<<" "<<pai<<endl; //...原创 2019-06-23 12:04:09 · 195 阅读 · 0 评论