- 博客(27)
- 收藏
- 关注
原创 C / C++内存管理
C / C++内存中程序的分布,malloc/calloc/realloc/free/new/delete动态管理内存 定位new对原始内存初始化
2024-08-27 10:21:13
976
原创 C++ 内联函数 auto关键字
内联函数在展开的时候也会因编译器的不同而有不同的实现,编译器会依据函数的实现逻辑完成展开,并不一定会完全照搬代码下来,而且在递归函数中内联函数会失效,多次递归会大量的建立栈帧再将内联函数展开会导致内存花销太大。用inline修饰的函数会成为内联函数,内联函数会在编译的阶段在调用函数的位置进行展开,不会涉及建立栈帧以提高效率,同时每一次的函数调用都会展开整个函数导致内存消耗的增加,是以空间换时间,所以内联函数比较适合代码量小,调用频繁的函数使用。此外auto是不能直接用于数组声明和函数的参数类型的。
2024-06-09 16:28:59
357
原创 C++ 缺省参数 函数重载 引用
回到赋值上当我们将一个浮点型的数据赋给整形变量它实际是怎样进行提升的呢,它会对数据进行截断如1.2会变成1,那么这个1.2改变了吗,并没有,所以我们可以得知截断后的数据会在一个空间内保存然后再赋值给变量,这个保存数据的空间其实就是常量区因为这个1就是一个常量,引用同理,我们不能对一个常量区的空间进行正常引用所以加上const修饰后就可以了。图中k变量这样子是不行的,常量是存储在常量区,这个区间的数据是不能被修改的,但是正常的引用对数据是有修改权限的,这样子定义编译器会直接报错不能通过。
2024-06-08 15:10:29
730
原创 C++ 命名空间 输入与输出
这是C++库函数的命名空间,例如cout和cin还有endl都是C++里面的库函数,我们平时使用是需要添加std::其中std就是库函数的命名空间的名字,若我们加上using namespace std后面的代码都不需要添加std::就可直接使用了,是因为using namespace会将后面的命名空间的访问开放不再需要名字和作用域限定符才能访问,只是当我们将其开放后命名空间内的变量函数就相当于是全局变量和函数不能在定义相同名字的变量,函数只能通过函数重载定义。
2024-06-07 15:45:49
452
原创 C++ 基础信息
如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况.class是一般的类类型。struct在C++中是特殊的类类型,声明中仅默认隐式的成员和基类访问限定与class不同(struct是public,class是private)。const表示只读类型(指定类型安全性,保护对象不被意外修改),volatile指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。
2024-06-07 14:51:24
771
原创 数据结构 排序
希尔排序(shell):在插入排序前进行预排序,预排序:将中间相隔多个(随意值)数据的连续数据分成一组如:第1,3,5,7个数据为一组第2,4,6,8个数据为一组进行预排序,作用:将很大或很小的数经过较少次的交换移动到前或后。单趟:定义一个数一般为最左值,从最左的下一个数据开始找,一个从最右开始找,最左找大,最右找小,将比最左值小的数放左边,比最左值大的数放右边,当相遇时交换最左值和相遇点值此时本来最左值的位置就是正确的位置。时间复制度O(N^2)最理想为O(N)需要进行一定的判断以跳出循环。
2024-06-07 14:32:13
418
原创 C语言 数组实现栈结构
栈是一种数据结构,也是一个特殊的线性结构,队列中的数据是先入先出类似于一个数据通道,栈中的数据是先入后出(FILO),我们可以想象向一个罐子中放入食物,食物的直径与罐子直径相同,由于底部是封闭的无法食物只能从罐口拿这样我们每次都只能拿到最上层的食物即最新放进去的食物,这就是栈存储数据的特性。因为栈的特性就是插入数据和取出数据是同一端,而数组最方便的就是尾插和尾删,对数组不需要任何的改动,删除就将有效数据个数减一,入栈直接将新数据赋给下标为有效数据个数的空间即可。
2024-05-20 00:06:31
325
原创 C语言的分支和循环语句
while()循环与do...while()循环 括号中的参数为布尔值即真或假,0为真非0为假只要括号中的表达式为真如while(1)则进入循环体内执行循环,仅当括号内为假(0)时不进入循环开始执行循环后面的语句。a++)在此循环中a从0开始每次循环一次则加一(a++就是a=a+1)知道判断式a<10不成立即a==10的时候循环终止。C语言中分支语句为switch()括号中填入整数表达式如(1)后编译器下一步会执行case 1的分支下的代码。第二个是判断表达式用于判断循环是否执行例如for(a=0;
2023-09-13 22:04:50
20
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人