【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485
asm | do | if | return | typedef |
---|---|---|---|---|
auto | double | inline | short | typeid |
bool | dynamic_cast | int | signed | typename |
break | else | long | sizeof | union |
case | enum | mutable | static | unsigned |
catch | explicit | namespace | static_cast | using |
char | export | new | struct | virtual |
class | extern | operator | switch | void |
const | false | private | template | volatile |
const_cast | float | protected | this | wchar_t |
continue | for | public | throw | while |
default | friend | register | true | |
delete | goto | reinterpret_cast | try |
首先要明白,我们为什么要学C++语言,作者当初学C++语言是为了Qt, 如果和我一样是嵌入式方向,则接下来看这篇文章的贴合度将达到100%,好了,废话不多说,直入正题。
学C语言先不要管语法, 先让内存概念深入人心, 什么是内存 ?
这里举个“栗子”,地球上有70多亿人,每个人都属于大自然,我们从大自然中诞生,亦从大自然回归,每个人都属于大自然中的“内存”,我们最终回归大自然(相当于内存释放),而我们学习C++语言,就能成为一个领域的世间主宰,掌控“亿万”内存,想必看到这里,大家对内存已经有了独特的认识。
前面提到了主宰者,那身为主宰者怎么掌控这些内存 ?
没有功法加持,就很难灵活调用,岂不荒废了这一身牛逼的功力,所以有前辈创出了这顶级功法“C++”!里面通过技能(语法)来操控世间万物(内存)。
int main(int argc, char *argv[]) {
u8 i = 1;
if (i == 1) {
i = 2;
}
return 0;
}
语法极其简洁,可能有读者不太了解 “ int argc,char *argv[] ”:这里的内容意义,由于C++语言是面向过程,系统级,当系统调用一个程序时,可以执行初期给定输入数据,其中前者是数据数量,后者是具体数据
接下来我们直接看指针,部分人群看到指针语法以及应用有些许畏惧,不要畏惧!我们可以把指针玩弄于股掌之中,然后为什么C语言要设计出指针,是为了内存交互便利,从时间和空间上考虑
int main(int argc,char* argv[]) {
u8 *p = null;
u8 i = 1;
p = &i;
*P = 2;
if (i == 1) {
i = 2;
}
return 0;
}
指针语法也是极其简洁,相比上个示例也多了 &和* ,这里的&取地址,*取值,为什么要取地址,又为什么要取值,所有应用按上个示例那样操控变量不香吗,是的,不香,因为我们从时间和空间上考虑才能更好的晋升大道,例如我灵魂可以出窍到别人身上,那么我可以随意操控全部人怎么做一件事,而不需要我再口述和对方沟通怎么做,效率大大提高。
typedef struct {
u8 i;
}T_str;
T_str T;
int main(int argc,char* argv[]) {
u8 i = 1;
if (i == T.i) {
i = 2;
}
return 0;
}
这里抛出结构体,为什么C语言要设计这些奇形怪状的东西,直接全部 u8 数组不好吗,不好,因为一旦我们工程庞大,数据内存段定义分布,就不好管理了,为了更好掌控万物,我们一般高内聚,就像人的体内有N个细胞组成在一起
数组与结构体的差异在于,数组的连续段数据类型是相同的,而结构体可以不同数据类型组成连续段内存
typedef struct {
u8 i;
}T_str;
T_str T;
int main(int argc,char* argv[]) {
u8 *p = null;
u8 i = 1;
p = (u8 *)&T;
*p = 2;
return 0;
}
指针可以指向万物,那当然也可以指向结构体,指针无所不能。
class File : public QObject
{
public :
int i;
private :
int j;
};
声明了类,就可以用类进行new对象了
File *file = new File();
new完后,会执行类的构造函数,如果类里面没有声明构造函数,会执行默认构造函数
#define macro 1
void func() {
u8 x = macro;
}
预处理阶段时把宏macro替换为1
u8 x = macro;
MOVS r0, #0x01
编译阶段把C++语言转换成汇编内容
MOVS R0, #0x01
0x2001
汇编阶段把汇编指令根据当前平台转换成机器码
程序中N条汇编机器码需要整合在一起,此时把这些机器码链接在一块输出最终可执行文件
学习C++语言,有疑惑可以直接用Qt来验证程序,学语法的同时学框架,如果中途学习感觉到困惑有阻碍,不必忧心,放宽心态,多看多写,自然而然就明白了其中的逻辑,另外不必刻意背语法,写着写着自然就记住了,印象模糊时可来回顾一遍,看到这里,相信大家基本入门了。
如果喜欢,请关注一波,后续持续更新嵌入式实用内容,谢谢大家
技术交流群 : 745662457
群内专注问题答疑,项目外包,技术研究