
c语言
文章平均质量分 60
AHAOAHA
www.ahaoaha.top
展开
-
2021-09-02
重要通知弟兄们,优快云博客此后不再持续更新,请大家访问我的个人博客,地址是 ahaoaha.github.io原创 2021-09-02 10:50:03 · 219 阅读 · 0 评论 -
C语言实现简单的航班管理系统
/*C语言实现简单的航班管理系统(单个文件)*/#include <stdio.h>#include <string.h>#include<stdlib.h>#include<assert.h>#define PERSON_MAXNUM 100#define PERSONNOTICKET_MAX 10#define MAX_SIZE ...原创 2018-08-08 12:35:34 · 18823 阅读 · 15 评论 -
C语言小游戏---2048
头文件:将头文件命名为 2048.h#define _CRT_SECURE_NO_WARNINGS 1#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;#include&amp;lt;time.h&amp;gt;#include&amp;lt;conio.h&amp;gt;#define RO原创 2018-08-27 10:17:36 · 788 阅读 · 0 评论 -
printf()函数缓存区刷新问题
某一天,我想在屏幕上的同一个位置每间隔3s输出[1,10]十个数字,随机编写了如下的程序:#include&lt;stdio.h&gt;#include&lt;unistd.h&gt;int main(){ int i=1; while(i&lt;=10) { printf("%d\r",i++);原创 2018-09-06 23:06:26 · 8676 阅读 · 1 评论 -
详解C程序的编译过程
环境在C语言的任何一种实现中,存在两种不同的环境,分别是翻译环境和执行环境。这两种环境并不一定必须同时位于一台机器上。翻译环境翻译环境即是为C语言代码从代码转变为机器可以执行的二进制文件过程中所要依赖的环境。执行环境执行环境即用于实际执行代码。程序的翻译过程当一个项目进程编译时,项目中可能存在多个xxx.c的源文件,每一个源文件都会单独经过编译器处理并分别生成一个目标文件,当生成目...原创 2018-11-21 21:29:44 · 542 阅读 · 0 评论 -
再谈C/C++内存管理
虚拟进程地址空间的分段在计算机中,不同的数据必须存放在不同的区域,内存会分出不同的区域。栈(向低地址生长)由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。在执⾏行行函数时,函数内局部变量量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理理器器的指令集中,效率很高,但是分配的内存相对有限。共享区堆(向高地址生长)堆空间是内存分段中最大的...原创 2018-11-21 21:35:28 · 252 阅读 · 0 评论 -
结构体内存对齐
一直以来对结构体内存对齐的知识都是十分模糊的,直至今日下定决心搞清楚它。结构体为什么要有结构体内存对齐?平台原因不是所有的硬件都能随意的访问任意地址处的任意数据, 有的CPU只能从内存上地址为4的倍数的地址处读取数据,而为了可以读取结构体数据,结构体的起始位置的地址理所应当的为4的倍数,而在结构体内部维护内存对齐是为了迎合硬件的这一特性。性能原因因为为了CPU能够快速访问,提高访问效...原创 2018-12-05 14:58:58 · 133 阅读 · 0 评论 -
浮点数在内存中的存储
浮点数在内存中的存储方式与整型数字是不同的,对浮点数的存储实际上是对IEEE754中规定的S、M、E的存储。浮点数:float、double、long double根据国际标准IEEE754,任意一个二进制浮点数可以被表示成下面的形式:(-1)S*M*@E(-1)^S表示符号位,当S=0,则表示正数;当S=1,则表示负数M表示有效数字,大于1,小于2(大于1小于进制)2^E表示位数...原创 2018-12-09 23:08:33 · 321 阅读 · 0 评论 -
scanf缓冲区刷新问题
最近在Linux终端写代码时,使用scanf输入一个字符,当不小心输入了一个退格键或者方向键时,程序就出现无限读取的现象,这显然是scanf的缓冲区内的字符无法刷新出去,即研究一下scanf缓冲区的刷新规则。scanf缓冲区的刷新规则当scanf从缓冲区读取走需要的数据之后,缓冲区应该会被清空,但在某些情况下,缓冲区并不会会清空,使用下面的代码检测一下什么情况下缓冲区不会被清空:输入数字...原创 2018-12-26 16:54:50 · 1003 阅读 · 0 评论 -
浮点数在内存中的存储
点击此处阅读原文浮点数在内存中的存储方式与整型数字是不同的,对浮点数的存储实际上是对IEEE754中规定的S、M、E的存储。浮点数:float、double、long double根据国际标准IEEE754,任意一个二进制浮点数可以被表示成下面的形式:(-1)S*M*2E(-1)^S表示符号位,当S=0,则表示正数;当S=1,则表示负数M表示有效数字,大于1,小于2(大于1小于进制)...原创 2019-05-21 21:53:08 · 175 阅读 · 0 评论 -
常见的排序算法
阅读原文请点击此处本文代码托管于Github,阅读源码请点击此处交换排序冒泡排序冒泡排序是我接触最早的排序方法,第一次接触冒泡排序是在大一上C语言课的时候,冒泡排序是最简单的一种排序算法。//代码解析冒泡排序--> 小-->大void BubbleSort(std::vector<int>& v){ for(size_t i = 0; i &...原创 2019-07-02 12:57:14 · 174 阅读 · 0 评论 -
C语言实现简单的通讯录管理系统
头文件:#ifndef __ADDRESS_LIST__#define __ADDRESS_LIST__#define _CRT_SECURE_NO_WARNINGS 1#define MAXSIZE 1000//定义通讯录最大存储人数为1000typedef struct LinkMan//定义存储的结构体{ char _name[20];//姓名 int _a...原创 2018-08-08 12:22:28 · 13471 阅读 · 0 评论 -
树、二叉树、二叉搜索树及其操作
树树是什么? ●树:由N(N&amp;amp;amp;amp;amp;amp;gt;=0)个结点构成的集合。对N&amp;amp;amp;amp;amp;amp;gt;1的树,有:有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M&amp;amp;amp;amp;amp;amp;gt;0)个互不相交的集T1、T2、……、Tm,其中每一个集合Ti(1&amp;amp;amp;amp;amp;amp;lt;= i原创 2018-06-05 22:33:14 · 1066 阅读 · 0 评论 -
C语言中的数组
一维数组一维数组的创建和初始化int main(){ int arr[5]={0};//创建一个包含有五个元素的整型数组,并将首元素初始化为0 int arr[]={0};//当不确定数组的元素个数时,[]里面可以不用写具体的值}错误的例子int main(){ const int n = 10; int arr[n];//这样来创建一个一维数组是错误的,[]里原创 2017-12-11 12:20:33 · 1170 阅读 · 0 评论 -
编写函数实现二进制位从左到右翻转后的值
1.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回 值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这个值包含下列各位: 00000000000000000000000000011001 翻转后:(2550136832) 100110000000000000000000000000原创 2017-12-14 11:45:28 · 523 阅读 · 0 评论 -
C语言小游戏---三子棋
将整个代码分装在三个文件中,分别为源文件:test.c game.c game.h 。 代码如下: game.h#ifndef __GAME_H__#define __GAME_H__#define ROW 3#define COL 3//定义棋盘行数和列数#include<stdio.h>#include<stdlib.h>#include<string.h>#include<t原创 2017-12-15 12:05:53 · 589 阅读 · 0 评论 -
C语言小游戏---扫雷
将整个代码分装在三个文件中,分别为源文件:test.c game.c game.h 。 代码如下: game.h#ifndef __GAME_H__#define __GAME_H_#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define MINE_NUM 20#include<stdio.h>原创 2017-12-17 18:51:30 · 746 阅读 · 2 评论 -
主函数在调用函数过程中栈空间的使用情况
#includeint Add(int a,int b){ int z=0; z=a+b; return z;}int main(){ int a=3; int b=5; int ret=0; ret=Add(a,b); return 0;}编写一段简单的代码用来理解主函数在调用函数过程中栈空间的使用情况。 将编码转原创 2018-01-15 20:22:47 · 4706 阅读 · 2 评论 -
C语言中的可变参数列表源码的剖析与理解
C语言中的可变参数列表首先写一段简单的代码用来理解可变参数列表#include<stdio.h>#include<stdarg.h>//实现可变参数列表时,必须使用此头文件int Add(int n, ...){ va_list arg; int sum=0; int i=0; va_start(arg, n); for...原创 2018-03-14 11:58:21 · 495 阅读 · 0 评论 -
C/C++注释转换
C/C++注释转换●将txt文件里的c语言注释方式(/…)转换成为c++注释方式(//…)。 将准备好的txt文件放在项目文件夹里。CommentConvert.h#ifndef __COMMENT_CONVERT__#define __COMMENT_CONVERT__#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;...原创 2018-03-25 21:34:19 · 431 阅读 · 0 评论 -
指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针
指针数组●在C语言中,数组元素全部为指针的数组称为指针数组。在32位系统中,指针占4个字节的大小,所以指针数组的每一个元素大小为4字节。指针数组内的每一个元素都是一个地址,它可以指向存在与内存上的元素。 ●指针数组的定义 类型名* 数组名[数组大小]char* arr[2]={"hello","world"};//arr即为一个指针数组,它有两个元素,arr[1]指向"hell...原创 2018-04-11 16:53:43 · 442 阅读 · 0 评论 -
C语言实现单链表的逆置
单链表的逆置有多种方法可以实现,但根据时间复杂度来讲,最简单的方法有两种:1.三个指针typedef int DataType;//类型名重命名typedef struct Node{ struct Node* _pNext; DataType _data;}Node,*PNode;//定义一个单链表PNode SListRever_ThreePoint(PNo...原创 2018-04-19 11:29:14 · 10408 阅读 · 5 评论 -
堆、堆的操作、优先级队列
堆●将完全二叉树的结构特点套用在一个一维数组上,堆的实质是一个一维数组。 什么样的一维数组才称为堆? ●将数组中的元素按照完全二叉树的方式排列起来(如图): 使其满足任一结点的数值均小于(大于)等于它的左右孩子结点的数值,位于堆顶结点的数值最小(最大),从根结点到每个结点的路径上数组元素组成的序列都是递增(递减)的 就称这个一维数组为堆。 ●若位于堆顶结点的数值最大,则为大堆 ...原创 2018-06-07 19:43:58 · 450 阅读 · 0 评论 -
C语言操作符
C语言操作符算数操作符关系操作符逻辑操作符移位操作符位操作符赋值操作符单目操作符条件操作符逗号表达式下标引用、函数调用和结构成员算数操作符 + - * / % ++(自加) --(自减) 1.除了“%”以外(“%”只可以作用于整型),其余的算数运算符都可以作用于浮点型和整型。 2.”/“—当”/“两边的数据类型都是整型时,执行整型除法(即返回的值类型原创 2017-11-22 15:53:36 · 607 阅读 · 0 评论