C/C++
C/C++
南城同学
这个作者很懒,什么都没留下…
展开
-
C/C++笔记:函数返回指针和引用
C/C++笔记:函数返回指针和引用。原创 2022-09-27 19:45:00 · 911 阅读 · 1 评论 -
C/C++笔记:函数参数
1. 函数的语法返回类型 函数名称(参数,参数,...){ 函数的功能区 return 返回值;}int Add (int a, int b){ char c = a + b; return c;}2. 函数参数2.1. 指针参数指针参考:C++笔记:指针(1)int add(int* a, int* b) { (*a) += 100; (*b) += 10; return (*a) + (*b);}i原创 2022-06-16 20:00:00 · 357 阅读 · 1 评论 -
C/C++笔记:std::string(二)指针数组字符串
在内存里的布局,与C字符串(char*)不同的是,C字符串以0结尾,而string字符串由于有专门记录其长度的属性,在实现的时候,并没有严格要求是否以0结尾!但是在C++11标准推出后,要求string字符串也以0结尾;通过.c_str()方法可以得到一个const char*的指针,指向str存储字符数据的内存空间;通过.data()方法可以得到一个const char*的指针,指向str存储字符数据的内存空间;在C++17标准下.data()方法得到的是一个char*的指针。...原创 2022-05-26 19:45:00 · 1939 阅读 · 0 评论 -
C/C++笔记:std::string(一)
1.需求:把两个字符串拼接一下.memcpy参考【C/C++笔记:动态内存分配】 char strA[0x10] = "123"; char strB[0x10] = "456"; char strC[0x20]; memcpy(strC, strA, strlen(strA)); memcpy(strC + strlen(strA), strB, strlen(strB) + 1); std::cout << strC << std::endl;..原创 2022-05-10 20:15:00 · 14106 阅读 · 1 评论 -
C/C++笔记:联合体 union
1. union通过union可以创建一个联合体,union中的成员变量共享内存,因此union的数据类型大小由其最大的成员变量决定;1.1. 语法union 联合体名称{ 变量类型 变量名称; 变量类型 变量名称; ...}1.2. 用法示例union USER { short sHP; int nHP;}2. union 的特点union中的成员变量共享内存,因此union的数据类型大小由其最大的成员变量决定;union USER原创 2022-03-24 18:30:00 · 1477 阅读 · 1 评论 -
C/C++笔记:指针和结构体
1. 通过指针访问自定义数据类型typedef struct Role { int HP; int MP;}*PRole;int main(){ Role user; PRole puser = &user; puser->HP = 50; puser->MP = 50; user.HP = 50; user.MP = 50;}*PRole 定义为结构体Role的指针,使其可通过指针访问结构体。指针用->访问;.对应的是实体;反汇编:原创 2022-03-23 19:15:00 · 1766 阅读 · 0 评论 -
C++笔记:C语言 字符串
1. 声明样式 char str[0xFF]{ "Hello" }; const char* strA = "Hello"; char* strB = new char[0xFF]{ "Hello" }2. 字符串处理2.1. C语言2.1.1. 输入、输出char 单字节字符; char str[0x5]; //申请5个字节空间 printf("请输入您的名字:"); scanf("%s", str); // 注意:如果输入超过5个字节,程序就会崩溃原创 2022-03-23 09:57:31 · 1143 阅读 · 0 评论 -
C++笔记:智能指针 std::shared_ptr
1. 语法std::shared_ptr<类型> 变量名称{};std::shared_ptr<int> ptrA{};std::shared_ptr<int> ptrB{std::make_shared<int>(5)};注意:std::make_shared不支持数组。std::shared_ptr<int[]> ptrC{ new int[5]{1, 2, 3, 4, 5} };2. 特性可以有多个std::shar原创 2022-03-21 19:15:00 · 2454 阅读 · 0 评论 -
C++笔记:智能指针 std::unique_ptr
1. 概念std::unique_ptr是所谓的智能指针的一种,主要目的是为了解决原生指针安全性不足的弊端。声明语法:std::unique_ptr<类型> 变量名称{}; int* a{}; //旧 std::unique_ptr<int> intPtr{}; //新初始化 int* b = new int[ 5 ]; std::unique_ptr<int> intPtrB{ new int{ 15 } };C++ 14 及原创 2022-03-18 18:30:00 · 2718 阅读 · 0 评论 -
C++笔记:引用
1. 定义引用是创建一个变量的引用名称;1.1. 语法:数据类型 & 变量名称{引用对象的名称}注意:引用必须初始化;一个变量可以有多个引用;一个引用初始化后,不能再改变引用对象。例如: int a{ 1001 }; int b{ 1002 }; int& la{ a }; std::cout << la << std::endl; //1001 std::cout << &a << std::e原创 2022-03-09 18:45:00 · 971 阅读 · 0 评论 -
C/C++笔记:动态内存分配
1. C语言中的动态内存分配1.1. mallocvoid* malloc(size_t size);malloc 将为用户分配size字节个内存,并且返回内存分配的地址,如果分配失败,那么返回0。int * pa = (int*)malloc(4);pa 是分配好的内存的地址,4是要分配的大小,如果分配失败, pa = 0。1.2. callocvoid* calloc(size_t count, size_t size);calloc 将为用户分配count *size字节个内原创 2022-03-07 21:15:00 · 1272 阅读 · 0 评论 -
C++笔记:指针数组和数组指针
1. 概念1.1. 指针数组int* ptrA[5];指针数组本质上来讲是一个数组,数组的内容是指针;1.2. 数组指针int (*ptrB)[5];数组指针的本质上来讲是一个指针,只是这个指针用来处理数组问题;2. 实验指针 + 1代表地址偏移一个数据类型的大小;数组指针 + 1 代表地址偏移量 = 数据类型的大小 * 数组的列数; int test[2][5]{ {1001, 1002, 1003, 1004, 1005}, {2001, 2002, 200原创 2022-03-07 19:00:00 · 693 阅读 · 0 评论 -
C++笔记:指针和数组
int a[5]; int* ptrA{&a[0]};003417D2 mov eax,4 // eax = 4 int a[5]; int* ptrA{&a[0]};003417D7 imul ecx,eax,0 // ecx = eax * 0003417DA lea edx,a[ecx] //edx = a[0]003417DE mov dword ptr [ptrA],edx .原创 2022-03-02 19:30:00 · 469 阅读 · 0 评论 -
C++笔记:指针(2)
7. 常量指针7.1. 概念所谓的常量指针,即这个指针指向的一个常量的内存地址,常量指针中,不能对其指向的内存地址进行改变,但是指针指向的地址可以改变。即:指针的指向可以改变,但是指向的内容不可改变。7.2. 声明方式const 变量类型*7.3. 举例 const int a{ 1000 }; const int b{ 2000 }; const int* ptr{ &a }; //a是常量,不允许修改a的内容; // *ptr = 500; //编译失败原创 2022-02-28 21:45:00 · 298 阅读 · 0 评论 -
C++笔记:指针(1)
1. 定义C/C++提供了让我们直接操作内存的机会,这种机会就是利用指针,指针要有两个要素:要操作的内存地址;要操作的内存大小。2. 指针的语法2.1. 声明方式一数据类型* 变量名称;int* a{};2.2. 声明方式二数据类型 *变量名称;int *b{};2.3. 注意点int* a,b; // a是指针,b是int类型的数据//希望a,b都是指针,可如下声明int *a, *b;3. 运算符3.1. 取址运算符&既然指针是用来操作内存的,原创 2022-02-19 20:15:00 · 223 阅读 · 0 评论 -
C++笔记:格式化
原创 2022-02-17 14:51:12 · 223 阅读 · 0 评论 -
C++笔记:std::vector
声明格式std::verctor<数据类型> 变量名std::verctor<int> studentId;std::verctor<int> studentId{1, 2, 3};std::verctor<int>studentId(5); //注意是(),而不是{},设置这个verctor拥有5个元素std::verctor<int>studentId(5, 100); //设置这个verctor拥有5个元素,每个元素的初始值是原创 2022-02-18 21:30:00 · 347 阅读 · 0 评论 -
C++笔记:std::array
由于原生的数组存在着安全问题,使用不当会造成程序的漏洞,因此C++标准库里提供了容器。1. 语法std::array<变量类型,元素数量>变量名;std::array<int, 5>studentId;std::array<int, 5>studentId{101, 102};2. 常见用法std::array<int, 5>studentId{1001, 1002};studentId.size();//返回拥有几个元素studentI原创 2022-02-18 20:30:00 · 446 阅读 · 0 评论 -
C++笔记:原生数组
1.数组1.1 数组的声明格式1.1.1. 格式一数据类型 数组变量名称[数组元素个数]{初始化值, 初始化值...}int a[10]{};1.1.2. 格式二变量类型 数组名[]{初始化, 初始化...}int a []{1, 2, ,3};//编译器会自动将a声明为一个有3个元素的数组1.2.数组的本质数组的本质是按照所申请的数据类型,向操作系统申请了一段连续的内存空间。两个特征:连续的有序的2. 数组遍历2.1. 常规 int studentId[]{101, 1原创 2022-02-16 20:30:00 · 619 阅读 · 0 评论 -
C++笔记:for / while / do while 运用时机
综述:执行效率: do while > while / goto > for1. goto1.1 源码 int password{ 98765432 }; int crackPass{}; //gotolcrack: if (crackPass != password) { crackPass ++; goto lcrack; } std::cout << "密码为 " << crackPass <<std::endl;1.原创 2022-02-10 11:09:47 · 500 阅读 · 0 评论 -
C++笔记:goto
1. 格式标签:xxxxxgoto 标签;举例 printf("请输入一个大写字母,我们将把它转换成小写\n"); char a;linput: std::cin >> a; if (a > 64 && a < 91) { a += 32; std::cout << a; } else { printf("输入不符合要求,请重新输入!\n"); goto linput; }...原创 2022-01-26 15:22:06 · 701 阅读 · 0 评论 -
C++笔记:变量的生命周期
注意点:访问全局变量,变量名重复时,用限定符“::”;int a{ 10 };int main(){ int a{ 20 }; std::cout << a << std::endl; //a = 20; std::cout << ::a << std::endl; //a = 10;}原创 2022-01-19 11:02:07 · 426 阅读 · 0 评论 -
C++笔记:字符处理
原创 2022-01-18 17:24:18 · 227 阅读 · 0 评论 -
C++笔记:位运算
1. 基础输出二进制内容:引用bitset头文件std::bitset<要显示的二进制位数>(要显示的变量)2. 左移 “<<” int a{(int)0b1111111111111111111111111111111};//0xFFFFFFFF a <<= 8; std::cout << std::bitset<32>(a) << std::endl;//111111111111111111111111000原创 2022-01-18 13:42:47 · 423 阅读 · 0 评论 -
C++笔记:类型改名
原创 2022-01-17 13:55:47 · 293 阅读 · 0 评论 -
c++笔记:运算优先级
补充:递增、递减运算符汇编层面++a 和 a++ 汇编代码是一样的。运算优先表原创 2022-01-17 10:34:33 · 329 阅读 · 0 评论 -
C++笔记:格式化输出流及转义
格式化输出流std::cout << 3E10;//3e+10---std::cout << std::fixed;std::cout << 3E10;// 30000000000.000000转义原创 2022-01-14 17:19:44 · 164 阅读 · 0 评论 -
C++笔记:进制转换及ASCII表
ASCII表原创 2022-01-14 16:06:05 · 430 阅读 · 0 评论 -
C++笔记:数据类型内存及类型转换
1. 隐式转换long double等级最高,int等级最低;两个不同等级的数值做运算时,结果自动转为高等级类型数值;short\char转换为int.2. 显式转换C++ : static_cast<目标类型>(要转换的内容):int a = static_cast<int>(b);C : 类型(要转换的内容):int a = int(b);---int a {10};unsigned b {20};atd::cout <<"a-b原创 2022-01-14 14:18:42 · 375 阅读 · 0 评论