摘要: 关于构造函数 类的构造模式用于对象的初始化 构造模式与类同名并且没有返回值 构造函数在对象定义时自动被调用 问题 如何判断构造函数的执行结果? 在构造函数中执行return语句会发生什么? 构造函数执行结果意味着对象构造成功? 1 #include <stdio.h> 2 class Test 3 阅读全文
posted @ 2020-01-10 20:08 认真做个普通人 阅读(327) 评论(0) 推荐(0)
摘要: C++中的动态内存分配 C++中通过new关键字进行动态内存分配 C++中的动态内存申请是基于类型进行的 delet关键字用于内存释放 1 1 //变量申请 2 2 Type*pointer = new Type; 3 3 //.... 4 4 delete pointer; 5 5 6 6 //数 阅读全文
posted @ 2020-01-10 19:54 认真做个普通人 阅读(829) 评论(0) 推荐(0)
摘要: 函数参数扩展 C++中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 函数默认参数的规则 参数的默认值必须从右向左提供 函数调用时使用了默认值,则后续参数必须使用默认值 #include "stdio.h" int mull(int x = 2); int add( 阅读全文
posted @ 2020-01-10 19:47 认真做个普通人 阅读(299) 评论(0) 推荐(0)
摘要: 函数从意义上应该是一个独立的功能模块 函数名要在一定程度上反映函数的功能 函数参数名要能够体现参数的意义 尽量避免在函数中使用全局变量 当函数参数不应该在函数体内部被修改时,应该加上const声明 如果参数是指针,且仅当做输入参数时,则应该加上const声明 void str_copy(char*s 阅读全文
posted @ 2020-01-10 19:41 认真做个普通人 阅读(414) 评论(0) 推荐(0)
摘要: 当字符串中有双引号时,需要使用“\”进行转义。 字符串中有“\”,需要使用“\\” 例如:const char* ip = "ifconfig | grep \"inet\" | grep -v 127.0.0.1 | awk '{print $2}'|grep '\\.'"; 阅读全文
posted @ 2020-01-10 19:34 认真做个普通人 阅读(460) 评论(0) 推荐(0)
摘要: 1. const只读变量 const修饰的变量是只读的,本质还是变量 const修饰的局部变量在栈上分配空间(可以通过指针修改) const修饰的全局变量在全局数据区分配空间(指针也修改不了) const只在编译期有用,在运行期无用 const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在 阅读全文
posted @ 2020-01-10 19:31 认真做个普通人 阅读(235) 评论(0) 推荐(0)
摘要: 1.枚举类型的使用方法 enum是C语言中的一种自定义类型 enum值是可以根据需要自定义的整型值 第一个定义的enum值默认为0 默认情况下的enum值是在前一个定义值的基础上加1 enum类型的变量只能取定义时的离散值 enum中定义的值是C语言中真正意义上的常量 在过程中enum多用于定义整型 阅读全文
posted @ 2020-01-10 19:25 认真做个普通人 阅读(195) 评论(0) 推荐(0)
摘要: 1.三目运算符 三目运算符(a?b:c)可以作为逻辑运算的载体 规则:当a的值为真时,返回b的值;否则返回c的值 等价于if else 在C语言中,三目符不能作为左值,三目运算符最终返回的是一个值,不是变量。(注意在C语言和C++中三目运算符的区别) 2.三目运算符(a?b:c)的返回类型 通过隐式 阅读全文
posted @ 2020-01-10 19:20 认真做个普通人 阅读(693) 评论(0) 推荐(0)
摘要: 数组的访问方式 以下标的形式访问数组中的元素 以指针的形式访问数组中的元素 下标形式VS指针形式 指针以固定增量在数组中移动时,效率高于下标形式 指针增量为1且硬件具有硬件增量模型时,效率更高 下标形式与指针形式的转换 a[n]《=》*(a+n) 注意:现代编译器的生成代码优化率已大大提高,在固定增 阅读全文
posted @ 2020-01-10 19:11 认真做个普通人 阅读(111) 评论(0) 推荐(0)
摘要: 数组的本质 数组是一段连续的内存空间 数组的空间大小为sizeof(arrary_type)*arrary_size 数组名可看做指向数组第一个元素的常量指针 问题: a+1的意义是什么?结果是什么? 指针运算的意义是什么?结果又是什么? 1 #include <stdio.h> 2 int mai 阅读全文
posted @ 2020-01-10 19:08 认真做个普通人 阅读(257) 评论(0) 推荐(0)
摘要: 函数对象分析 1.客户需求: 编写一个函数,函数可以获得斐波那契数列每项的值,每调用一次返回一个值,函数可根据需要重复使用 1 // 斐波那契数列.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 2 #include <iostream> 3 using namespace 阅读全文
posted @ 2020-01-10 18:18 认真做个普通人 阅读(184) 评论(0) 推荐(0)
摘要: 1.auto关键字 auto即C语言中的局部变量的默认属性 auto表明将被修饰的变量存储在栈中 编译器默认所有的局部变量都是auto的 2.register关键字 register关键字指明将局部变量存储于寄存器中 register只请求寄存器变量,但不一定成功 register变量的必须是CPU 阅读全文
posted @ 2020-01-10 18:05 认真做个普通人 阅读(320) 评论(0) 推荐(0)
摘要: 做HLW8032电能表项目中关于USART使用DMA接收定长数据的问题 1:由于HLW8032芯片一上电,芯片就会通过串口每隔50ms向STM32发送24字节的数据,且我不能通过STM32控制HLW8032发送数据,由于STM32初始化需要一段时间,所以当STM32接收数据时会出现丢包的情况。。 2 阅读全文
posted @ 2020-01-10 17:53 认真做个普通人 阅读(1355) 评论(0) 推荐(0)
摘要: 1.MAP文件基本概念 段(section):描述映像文件的代码和数据块 RO:Read-Only的缩写,包括RO-data(只读数据)和RO-code(代码) RW:Read-Write的缩写,主要是RW-data,RW-data由程序初始化初始值 ZI:Zero-initialized的缩写,主 阅读全文
posted @ 2020-01-10 17:49 认真做个普通人 阅读(12449) 评论(0) 推荐(2)
摘要: 引入话题: 生活中的对象都是被初始化后才上市的 生活中的对象被销毁前会做一些清理工作 问题:C++中如何清理需要销毁的对象 一般而言,需要销毁的对象都应该做清理 解决方案: 为每个类都提供一个public的free函数 对象不再需要时立即调用free函数进行清理 1 class Test 2 { 3 阅读全文
posted @ 2020-01-10 17:26 认真做个普通人 阅读(332) 评论(0) 推荐(0)
摘要: 问题:C++中的类可以定义多个对象,那么对象构造的顺序时怎么样的呢?? 对于局部对象,当程序执行流到达对象的定义语句时进行构造 对于堆对象 当程序执行流到达new语句时创建对象 使用new创建对象将自动触发构造函数的调用 对于全局对象 对象的构造顺序是不确定的 不同的编译器使用不同的规则确定构造顺序 阅读全文
posted @ 2020-01-10 17:21 认真做个普通人 阅读(393) 评论(0) 推荐(0)
摘要: 1.常量与宏回顾 C++中的const常量可以替代宏参数定义,如:const int A = 3; <--> #define A 3 问题:C++中有解决方案替代宏代码片段吗? 2.内联函数 C++中推荐使用内联函数替代宏代码片段 C++中使用inline关键字声明内联函数 内联函数声明时inlin 阅读全文
posted @ 2020-01-10 17:17 认真做个普通人 阅读(169) 评论(0) 推荐(0)
摘要: 成员变量的回顾 通过对象名能够访问public成员变量 每个对象的成员变量都是专属的 成员变量不能在对象之间共享 新的需求: 统计在程序运行期间某个类的对象数目 保证程序的安全性(不能使用全局变量) 随时可以获取当前对象的数目 以下程序不满足要求,因为每个对象的成员变量都是专属的。 在C++中可以定 阅读全文
posted @ 2020-01-10 16:30 认真做个普通人 阅读(1228) 评论(0) 推荐(0)
摘要: 请看程序: 1 #include <stdio.h> 2 class Complex 3 { 4 int a; 5 int b; 6 public: 7 Complex(int a,int b) 8 { 9 this->a = a; 10 this->b = b 11 } 12 friend Com 阅读全文
posted @ 2020-01-10 15:03 认真做个普通人 阅读(270) 评论(0) 推荐(0)
摘要: 数组是相同类型变量的有序集合,例如:int a[5]; a代表数组第一个元素的起始地址 有5个int类型的数据,且是5个连续的内存空间。 这个20个字节的空间的名字叫a,a[0],a[1]都是数组中的元素,数组中的元素没有名字 数组的大小 数组在一片连续的内存空间中存储元素 数组元素的个数可以显式或 阅读全文
posted @ 2020-01-10 14:53 认真做个普通人 阅读(350) 评论(0) 推荐(0)
摘要: 动态内存分配的意义 C语言中的一切操作都是基于内存的 变量和数组都是内存的别名 内存分配由编译器在编译期间决定 定义数组的时候必须指定数组长度 数组长度是在编译期就必须确定的 需求:程序运行的过程中,可能需要使用一些额外的内存空间 malloc和free用于执行动态内存分配和释放 malloc所分配 阅读全文
posted @ 2020-01-10 14:46 认真做个普通人 阅读(530) 评论(0) 推荐(0)
摘要: 重载(Overload) 同一个标识符在不同的上下文有不同的意义 如:“洗”和不同的词汇搭配后有不同的含义,洗衣服,洗脸,洗脑,洗马桶。。。。 “play”和不同的单词搭配后有不同的含义,play chess,play piano,play basketball 函数重载( Function Ove 阅读全文
posted @ 2020-01-10 14:11 认真做个普通人 阅读(315) 评论(0) 推荐(0)
摘要: 指针本质分析 变量回顾:程序中的变量只是一段存储空间的别名,那么是不是必须通过这个别名才能使用这段存储空间? 可以通过指针改变另一个变量的值 指针的本质为变量(只要是变量,就有地址),不过说这种变量很特殊,它存储的是变量的地址值 在指针声明时,*号表示所声明的变量为指针 在指针使用时,*号表示取指针 阅读全文
posted @ 2020-01-10 14:02 认真做个普通人 阅读(227) 评论(0) 推荐(0)
摘要: 知识点: C语言中单引号用来表示字符字面量 C语言中的双引号用来表示字符串字面量 ‘a’表示字符字面量,在内存中占一个字节,‘a’+1表示‘a’的ascii码加1,结果为‘b’ “a”表示字符串字面量,在内存中占2个字节,“a”+1表示指针运算,结果指向“a”结束符‘\0 ’ 字符字面量被编译为对应 阅读全文
posted @ 2020-01-10 13:48 认真做个普通人 阅读(824) 评论(0) 推荐(0)
摘要: 杜绝野指针 指针变量中的值是非法的内存地址,进而形成野指针 野指针不是NULL指针,是指向不可用内存地址的指针 NULL指针并无危害,很好判断,也很好调试 C语言中更无法判断一个指针保存的地址是否合法 野指针的由来 局部指针变量没有初始化(定义指针需要初始化NULL) 指针所指向的变量在指针之前被销 阅读全文
posted @ 2020-01-10 13:41 认真做个普通人 阅读(206) 评论(0) 推荐(0)
摘要: 函数重载回顾 函数重载的本质为相互独立的不同函数 C++中通过函数名和函数参数确定函数调用 无法直接通过函数名得到重载函数的入口地址 函数重载必然发生在同一个作用域 类中的成员函数可以进行重载 构造函数的重载 普通成员函数的重载 静态成员函数的重载 问题:全局函数,普通成员函数以及静态成员函数之间是 阅读全文
posted @ 2020-01-10 10:08 认真做个普通人 阅读(3112) 评论(0) 推荐(1)