c/c++
c++知识点整理
Diligent_wu
这个作者很懒,什么都没留下…
展开
-
malloc 和 空间配置器
二级空间配置器原创 2022-07-18 18:29:01 · 209 阅读 · 1 评论 -
柔性数组成员
柔性数组成员typedef struct{ char a; double b; int c; char ptr[0]; //柔性数组成员 不占空间}Test;内存分析:优点一:void main(){ char str[] = "Hello Wrold"; Test* ptr = (Test*)malloc(sizeof(Test)+strlne(str)+1); if(NULL == ptr) { printf("Out of Memory!\n");原创 2022-04-23 17:22:26 · 197 阅读 · 0 评论 -
C++特性:多态、重写
多态概念通俗来说,多态就是多种形态,具体点就是去完成某种行为,不同的类去完成就会产生不同的形态。比如一个Active方法,包含了吃、走、爬、飞等行为,当调用这个方法,蜗牛就是爬,鸟就是飞。class Base{ virtual void fun(){} virtual Base* fun(){} //重载,也是重写的例外之一 virtual ~Base() //重写的例外之二}class D : public Base{ virtual void fun(){} /原创 2022-04-11 20:13:53 · 1142 阅读 · 1 评论 -
代码风格:参数传递的方式
代码风格问题在实际写代码的过程中,函数参数的传递方式是我们经常需要考虑的问题,但是其实是很简单,但清楚这点和不清楚是两回事。int a 普通参数传递,可以在函数体中修改,形参,自动释放const int a 普通形参传递,不希望在函数体中修改,用的不多,实际意义不大int *a 传一个地址,可以对这块内存进行修改,修改之后,这块内存的数据也会发生改变。 输出型参数const int* a 表示对这块内存不改变,输出型参数int &a 引用是别名,还是一块空间,输入输出型参数原创 2022-03-22 17:10:43 · 304 阅读 · 0 评论 -
C++特性:继承
导语:C++是对C语言的优化和改进,C++之所以优秀的点在于它的特性:抽象、封装、继承和多态。本章总结继承的规则和特性,都是干货,与读者共同学习。继承作用代码的复用子类继承父类,可以理解为,将父类的代码拷贝一份到子类中,达到子类可以调用父类方法的目的。那为什么是可以理解而不是就是呢?是因为有几个东西是不可以拷贝的,比如,父类的拷贝和析构方法,友元和静态成员。友元关系是不能继承的,必须各是各的。静态成员是在类外初始化的,从定义到程序运行结束都一直存在,不是属于某一个类的。所以也不能拷贝。形原创 2022-03-20 20:23:14 · 350 阅读 · 0 评论 -
C++智能指针详解
注:源码剖析在代码注释展现了解智能指针头文件 #including< memory >版本 VC版本自动指针auto_ptr VS版本自动指针auto_ptr boost库的六种智能指针 局部指针: scoped_ptr、scoped_array 共享计数器指针: shard_ptr、scoped_array 弱指针: weak_ptr 侵入式引用计数指针: intrusive_ptr C++11参考boost实现的: we原创 2022-03-19 16:42:42 · 227 阅读 · 0 评论 -
C++内存管理,const、mutable、static、编译过程
回答问题可以的。变量修改的本质是存储空间中的数据被改变,我们通过变量名、指针等方式改变数据都是找到数据的存储位置,对存储空间进行操作。换句话说,空间的存储位置决定了一个变量能不能被修改。局部变量存放在栈区,程序运行完毕释放内存。而加了const修饰之后,,我们不可以使用变量名对这块内存进行修改,却可以通过其他方式对修改内存从而达到对变量的修改。全局变量存放在数据段,加const修饰之后,存放在只读数据段,是无法对内存进行操作的。所以一个数据能不能被修改,还是看它存放的位置。变量名和变量我们首原创 2022-03-16 21:38:52 · 2036 阅读 · 0 评论 -
复杂指针解析
复杂指针解析因为C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的:The right-left rule: Start reading the declaration from the innermost parentheses,转载 2022-03-07 17:54:03 · 329 阅读 · 0 评论 -
自定义类型(结构体、枚举、联合体)内存大小的计算方法
内存对齐为什么会存在内存对齐?大部分参考资料是这么说的:平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。性能原因: 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访问。总体来说, 结构体的内存对齐是那空间换取时间的做法。那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到: 让占用原创 2021-07-17 18:45:29 · 383 阅读 · 0 评论 -
C进阶库函数:字符串函数和内存函数的模拟实现
今天我学习了C语言常见的几种库函数,我们来模拟实现一下!字符串函数:strlen()strcpy()strcat()strcmp()strncpy()strncat()strstr()内存函数:memcpy()memmove()memcmp()memset()字符串函数函数细节代码内有详细的注释,望垂阅!这是下面函数的接口代码,可以参考运行:int main(){ ////////////////////////////////////////////////////原创 2021-06-19 16:28:58 · 115 阅读 · 0 评论 -
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)
题目喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)分析:我们来分析一下过程:20元买20瓶汽水,得到20个空瓶,钱花光了。 2020个空瓶全部换成汽水,得到10个空瓶 20/2=1010个空瓶全部换成汽水,得到5个空瓶 10/2=55个空瓶可以换2个汽水,剩余1个空瓶, 5%2=2 余1换完之后剩3个空瓶,可以换1个汽水,剩余1个空瓶原创 2021-05-23 21:51:08 · 2558 阅读 · 0 评论 -
打印菱形图案
题目:打印菱形题目内容:用C语言在屏幕上输出以下图案:思路:这道题的解决办法有很多,大多都是拆分法,这里捡一种我觉得最方便的方法作以介绍: 首先我们需要明白,这种图案形式打印的题目,都是一行一行打印出来的。 之后就是考虑如何做方便了。拆分: 我们将菱形拆分成 上三角 + 中间最长的部分 + 下三角 ,分别打印即可 仔细观察,每一行的图案由空格和星号组成,数一数对应行的空格数和星号数分别进行打印即可 找规律,我们发现,‘*’的数量是 2原创 2021-05-23 21:41:21 · 2224 阅读 · 0 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
题目5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。思路:[日本凶杀案](https://editor.csdn.net/md/?articleId=117200548)按照上一题的逻辑,我们仍然用题给的条件作为判断依据来分析: 用各位选手都说对了一半作为条件(0为假,1为真)原创 2021-05-23 21:25:38 · 1418 阅读 · 1 评论 -
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
题目: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。思路:程序猿逻辑: 逐个分析, 如果A说了假话,BCD三人就说的是真话: 则凶手是A,凶手是C,凶手是D,C在胡说。原创 2021-05-23 21:18:32 · 849 阅读 · 0 评论 -
函数递归;斐波那契数列--引申--青蛙跳台阶问题
函数递归什么是递归?是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。(百度百科)分析这句话,函数自己调用自己,就是函数递归。字面意义我们有所了解,接下来看一下实例分析:实例:斐波那契数列什么是斐波那契数列?(百度百科)斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597…用通俗的话来进行定义,该数列从第三项开始,每一项都等于前两项之和。我们来做一个程序,要求输出原创 2021-04-29 18:43:26 · 330 阅读 · 1 评论 -
冒泡排序梳理
概念冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。冒泡由来这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。算法稳定性冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前原创 2021-04-29 18:41:40 · 131 阅读 · 3 评论 -
C语言实现:数组:三子棋游戏
游戏规则有如下图的一个棋盘,一方下白子,一方下黑子,直到出现第一个三点一线,游戏结束!创建棋盘我们要设计这个游戏,首先就出现几个问题。如何设计棋盘呢? 创建一个3*3的二维数组,每个元素是一个 char类型。用‘x’表示黑子(玩家1),用‘o’表示白子(玩家2),用‘ ’(空格)表示空白,这样,棋盘就设计好了。游戏流程1、创建棋盘,并且初始化~ 把所有的位置都设为空格~2、打印棋盘~3、玩家进行落子~ 我们创建的是二维数组,就让玩家输入一组坐标(row,col)进行落子~原创 2021-04-27 21:41:11 · 769 阅读 · 4 评论 -
C语言实现“扫雷”游戏;拆分完整过程;
阅读建议扫雷游戏Windows系统下的扫雷游戏想必大家耳熟能详!规则想必不用多说,我们通过下面的分析思路来写这个游戏分析我们来看一下扫雷的界面,这是一个已经玩到一半的游戏图中有两个部分,一个是已经翻开的(有地雷的),另一个是还没有翻开的(没有地雷的),我们可以理解为两张地图。那么我们要设计一个扫雷游戏的话,是不是第一步就要创建两个二位数组来表示这两张地图呢?那地图创建好了,我们来观察,地图上有小格子,每个格子是不是要记录不同的信息?而格子是不是也有两种不同的状态(翻开和未翻开)?那着手点我原创 2021-04-27 13:28:03 · 656 阅读 · 9 评论 -
函数判断素数:实现一个函数,判断一个数是不是素数,利用上面实现的函数打印100到200之间的素数。
素数只能被 1 和 它本身 整除的数就叫素数。算法设计很简单,如果n=1,返回0;(1既不是素数也不是合数)i从2开始自增,设置一个循环,用n%i,如果n%i==0,返回0,(这是找反例)循环结束也没有找到反例,当前就是素数。函数求解注意主函数是如何调用isPrime()函数并让他进行打印的直接上代码!int isPrime(int n){ int i = 0; if (n == 1) return 0; for (i = 2; i <= n; ++i) { if原创 2021-04-25 18:15:27 · 8272 阅读 · 2 评论 -
二分查找法(暴力拆解法)
概念二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 [百度知道]分析1,通过三个数来查找,开始值(低位置),中间值(mid),末尾值(高位置),下文分别称low位置,mid值,high位置2,用你想查找的key值做比较,如果key值大于mid值,就把mid值当成开始值(即把mid值赋值给low位置),继续求平均值,继续跟提供的值做比较如果是小于中间值那么旧把末尾值变成中间值的位置,继续刚原创 2021-04-25 17:56:36 · 702 阅读 · 0 评论 -
完成c语言猜数字游戏
随机数的生成猜数字游戏的一个重要的考察点是: 随机数的生成。这里我为大家找到一篇文章,里面详细讲解了,C语言提供的srand()函数和rand()函数的内容及用法,我把链接放在这里了。[https://www.cnblogs.com/Camilo/archive/2013/09/21/3332279.html]在猜数字游戏里,我们只需要知道并且会用srand( (unsigned)time( NULL ) ); //初始化随机数需要掌握的更多一点的功能就是自定义随机数选取的范围了,这里我摘抄下原创 2021-04-25 17:40:55 · 160 阅读 · 0 评论 -
用C语言求两个数的最大公约数,最小公倍数
“最大公约数”最大公约数,也称最大公因数、最大公因子,指两个或多个整数共有约数中最大的一个。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。在C语言里,我们常用辗转相除法和更相减损法来写;但我们通过计算机的计算能力也可以使用暴力穷举法!一、暴力穷举法:我们先输入两个数,比较大小,令 a = 较大值 , b = 较小值;让两个数同时除以较小值,如果不能同时整除,则给较小的数减一,继续相除,直到找到第一个可以同时整除的数,这个数就是两个数的最大公约数;看代码之前,需要原创 2021-04-25 15:16:41 · 5284 阅读 · 1 评论 -
输出所有的“水仙花数”
“水仙花”数什么是“水仙花”数呢?我们也就不管它也叫什么了,来点对代码友好的吧!“水仙花”数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。问题分析首先我们知道水仙花数是一个三位数,那么它的范围就是100~999。根据它的定义,我们可以将他拆分成个位、十位、百位三个数字,然后在判断(个位的三次方)+(十位的三次方)+(百位的三次方)结果是不是与这个数本身相等。相等打印就好啦!算法设计个位数: g = n %10原创 2021-04-24 21:28:16 · 2237 阅读 · 0 评论 -
乘法口诀:一:在屏幕上输出9*9乘法口诀表 二、实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
这里有两道题:一:在屏幕上输出9*9乘法口诀表这个很简单,只需要两个循环嵌套即可,一个控制行,一个控制列;直接上代码!void main(){ int i = 0, j = 0; int a = 0; for (i = 1; i <= 9; ++i) { for (j = 1; j <= i; ++j) { a = i*j; printf("%d * %d = %d ", j, i, a); } printf("\n"); }}这里我们需要原创 2021-04-24 20:49:11 · 426 阅读 · 0 评论 -
编写程序数一下 1到 100 的所有整数中出现多少个数字9
规律:一、1~100中有9的数字:9 19 29 39 49 59 69 79 89 (除十余九)99 98 97 96 95 94 93 92 91 (除十得九)二、转换成代码:i / 10 = 9 i % 10 = 9直接上代码!//编写程序数一下 1到 100 的所有整数中出现多少个数字9//1~100有9的数:9 19 29 39 49 59 69 79 89 (除十余九) 99 98 97 96 95 94 93 92 91原创 2021-04-24 20:37:25 · 454 阅读 · 4 评论 -
使用C语言编写程序,求10个整数中的最大值
分析:首先我们看到十个整数的时候就知道要 int ar [10] ,这十个数字我们可以直接初始化,这里我们用scanf初始化数组。那么怎么找最大的那一个呢? 办法有很多,最简单的就是将数组第一个数定为MAX,让后面的每一个数与MAX进行比较,如果这个数大于MAX,就让这个数变成MAX。比完(循环结束)就返回MAX。很简单我们就不多说了,直接上代码!void main(){ int MAX = 0; int i = 0; int ar[10] = {0};原创 2021-04-24 20:15:51 · 5551 阅读 · 0 评论 -
计算1/1-1/2+1/3-1/4+1/5+……+1/99-1/100的值
分析:1.找变和不变的量,分析变化的量有什么规律,找切入点。2.分子都是1,分母是1,2,3…100递增,奇数项为正,偶数项为负思路:1.定义一个ret作为输出的结果(即表达式的值)。2.将奇数项往ret上加,偶数项往ret上减(if奇数项+,else-)3.把ret打印出来即可注意点:注意表达式是分数(浮点类型)相加,那结果就应该用浮点类型代码:#include<stdio.h>void main(){ double ret = 0;原创 2021-04-24 19:57:07 · 1741 阅读 · 0 评论 -
闰年
概念闰年是公历中的名词。闰年分为 普通闰年 和 世纪闰年普通闰年:公历年份是4的倍数的,且不是100的倍数,为普通闰年世纪闰年:公历年份是整百数的,必须是400的倍数才是世纪闰年闰年(公历中名词)和闰月(农历中名词)并没有直接的关联。代码根据闰年的概念,我们不难解决常见的笔试题: 实现函数判断year是不是润年。废话不多说,直接上代码,这里我们列出了两种形式不同的函数:int isLeepYear1(int year){ if (year原创 2021-04-23 20:07:22 · 370 阅读 · 0 评论 -
形参与实参
形参变量:形参变量是功能函数里的变量,只有在被调用的时候才分配内存单元,调用结束后立即释放。所以形参只在函数内部有效。实参变量:实参可以是常量,变量,表达式,函数等等,但无论是何类型,在进行函数调用是,他们必须有确定的值,以便把这些值拷贝给形参。形参和实参在内存中有不同的位置:在函数运行时,形参和实参是不同的变量,他们在内存中处于不同的位置。形参将实参的内容拷贝一份,在该函数运行结束的时候释放,实参内容不变。举例一:(形参不能改变实参)看看下面这段代码中实参和形参的位置,这个过程中实参并原创 2021-04-18 18:55:45 · 32950 阅读 · 5 评论 -
将三个数从大到小输出
这个问题很简单,只需要进行三次交换即可,但这期间需要创建临时变量。不是最好的做法。废话不多说,直接上代码!直接法void main(){ int a, b, c, t; //t为临时变量 printf("请输入三个整数:>"); scanf("%d%d%d", &a, &b, &c); if (a < b) { t = a; a = b; b = t; } if (a < c) { t = a; a = c;原创 2021-04-18 17:00:21 · 89 阅读 · 0 评论 -
vs自动对齐快捷键
vs里的行间距和字间距不是c语言的格式解决办法:自动对齐:方法一(部分对齐):用鼠标选中要对齐的区域,按Crtl+K+F方法二(全部对齐):Ctrl+A全选,Crtl+K+D / Ctrl+K+F 就自动对齐啦!...原创 2021-04-11 11:17:16 · 10126 阅读 · 0 评论 -
vs注释与反注释快捷键
使用VS C语言编译器的快捷注释按键:选中部分注释: Ctrl + K+D (按住Ctrl然后先按K再按D)注释前:注释后:反注释: Ctrl + K+U (按住Ctrl然后先按K再按U)操作完就恢复了。原创 2021-04-11 10:50:31 · 974 阅读 · 0 评论 -
c语言的各种规范:C89、C90、C95、C99
c语言的起源C语言的发明者是丹尼斯.里奇(Dennis Ritchie),C语言是在B语言的基础上发展起来的1970年,汤普森以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且他用B语言写了第一个UNIX操作系统。1971年,同样酷爱Space Travel的丹尼斯·里奇(Dennis M.Ritchie)为了能早点儿玩上游戏,加入了汤普森的开发项目,合作开发UNIX。他的主要工作是改造B语言,使其更成熟。1972年,里奇在B语言的基础上最终设计出了一种新的语言,他取原创 2021-04-11 10:42:20 · 1271 阅读 · 0 评论 -
博客--初见
自我介绍大家好,我是一名光电信息科学与工程专业的大二学生,目前就读于西安工业大学。高考的失意使得我与最爱的计算机专业失之交臂,在目前的专业里是郁郁不得志呀!这越发激起了我对计算机编程的热爱。我即将开始我的编程之旅。也许未来十年,我将成为行业大佬…小白“不切实际”的目标既然决定开始全身心地学习编程,起码得给我自己定个目标呀。都说编程铁饭碗,那我也肯定不是单纯抱着”学习“的目标来学的,也需要有个配得上我堂堂大佬的好职位呀!先给百度放个狠话,等着我吧!老师说让我考虑每周对学习编程所花费的时间,但是我想编程原创 2021-04-07 20:17:04 · 104 阅读 · 0 评论