![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
Wan_shibugong
这个作者很懒,什么都没留下…
展开
-
ADC0809的使用
一、前言介绍使用ADC0809对一个模拟电压进行转换转换后的电压使用数码管显示出来二、ADC0809的介绍1、ADC0809简介ADC0809是采用COMS工艺制造的双列直插式单片8位A/D转换器。分辨率8位,精度7位,带8个模拟量输入通道,有通道地址译码锁存器,输出带三态数据锁存器。启动信号为脉冲启动方式,最大可调节误差为±1LSB。ADC0809内部没有时钟电路,故CLK时钟...原创 2019-06-17 16:47:45 · 41726 阅读 · 15 评论 -
【C语言】内存操作函数的实现
内存操作函数 memcpymemmovememsetmemcmpmemchr模拟实现上述函数(编译环境VS2013)memcpy函数原型void * memcpy ( void * destination, const void * source, size_t num );#include <stdio.h>#include <string.h...原创 2018-08-23 16:22:28 · 332 阅读 · 0 评论 -
scanf()函数中%[]格式控制符用法
此格式控制符的基本格式为:%[scanfset]scanfset 有两种形式:一种是以非 “^” 字符开头的 scanset , 表示在读入字符串时将匹配所有在 scanfset 中出现的字符,遇到非scanfset 中的字符时输入就结束;另外一种形式是以 “^” 字符开头的scanfset ,表示在读入字符串时将匹配所有不在scanfset 中出现的字符,遇到scanfset 中的字符输入就...转载 2018-08-30 17:40:12 · 9411 阅读 · 3 评论 -
【C语言】字符串函数的实现
求字符串的长度 strlen长度不受限制的字符串函数 strcpy strcat strcmp长度受限制的字符串函数 strncpy strncat strncmp字符串查找 strchr strrchr strpbrk strstr高级字符串查找 strspn strcspn求字符串的长度strlen#include <stdio.h&g...原创 2018-08-22 19:19:05 · 1354 阅读 · 0 评论 -
【C语言笔记】函数的调用过程(栈桢)
一、什么是栈桢1、首先引入百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程函数调用的一种数据结构。”。2、栈帧表示程序的函数调用记录,而栈帧又是记录在栈上面,很明显栈上保持了N个栈帧的实体,(实际上我们这里说的栈帧是软件上的概念,据说有硬件概念,不是很了解),那就可以说栈帧将分割成了N个记录块,但是这些记录块大小不是固定不变的,因为栈不仅保存诸如:函数入参,出参,返回地址和...原创 2018-07-05 02:31:04 · 924 阅读 · 1 评论 -
堆和栈的理解
一、概念1、C/C++编译的程序占用的内存分为以下几个部分(1) 栈区(stack)———由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。(2) 堆区(heap)——— 是自由存储区,存放动态数据,像new,malloc()申请的空间就是堆区的,一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配...转载 2018-07-04 21:44:10 · 703 阅读 · 0 评论 -
%d %ld %lld
相信下面几个表达方式,就能说明问题吧: %d=int,%ld=long,%lld=long long;在32位编译器上,int=long=32bit;long long=64bit。转载 2018-07-17 00:06:32 · 8327 阅读 · 0 评论 -
利用Markdown创建表格
点击查看优秀博客转载 2018-07-03 18:23:25 · 711 阅读 · 0 评论 -
C/C++常用头文件及函数汇总
C 头文件 说明 stdio.h 定义输入/输出函数,如printf,scanf,getchar等 stdlib.h 定义杂项函数及内存分配函数,如malloc等 stddef.h 常用常量,如NULL,size_t等 stdint.h 定义了各种整型的别称,如uint8_t等 string.h 字符串处理(包含了std...转载 2018-07-03 17:11:20 · 578 阅读 · 0 评论 -
判断机器大小端
一、机器大小端1、大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。 short a = 0x1234;//如果0x12在低址处,就是大端2、小端模式:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模...原创 2018-07-03 17:03:02 · 640 阅读 · 0 评论 -
【C++】struct 与 class的区别(在标准C++中)
在C++中struct 与 class 区别struct中的成员默认是public。class中默认的是private如果没有多态和虚拟继承,在C++中,struct和class的存取效率完全相同。在用模板的时候只能写 template <class Type>或template<typemname Type> 不能写template<stru...转载 2018-09-13 00:27:41 · 438 阅读 · 0 评论 -
【C++】struct结构在C和C++中的区别
struct结构在C和C++中的区别C语言中:struct是用户自定义数据类型(UDT);C++中struct是抽象数据类型(ADT),支持成员函数的定义,(C++中的struct能继承,能实现多态)。C中struct是没有权限的设置的,且struct中只能是一些变量的集合体,可以封装数据却不可以隐藏数据,而且成员不可以是函数。C++中,struct的成员默认访问说明符为public(为...转载 2018-09-13 00:30:02 · 667 阅读 · 0 评论 -
【C++】struct 与 union 在C与C++中的区别
点击查看转载 2018-09-13 00:32:39 · 300 阅读 · 0 评论 -
volatile关键字的作用
一、保证内存可见性1、基本概念:volatile的本意是“异变的”因为访问寄存器要比访问内存单元快的多,所以编译器一般都会做减少存取内存的优化,但是可能会脏读数据。当要求使用volatile声明变量的时候,系统总是重新从它所在的内存读取数据,即使他前面的指令刚刚从该处读取过数据。从而保证了数据在内存的可见性。eg1:1、智能的编译器会注意下面代码使用了两次x,但并为改变它的值,于是编译器把x...原创 2018-10-04 22:08:28 · 5950 阅读 · 0 评论 -
【数据结构】链表的基本操作和深度练习
linklist.h#pragma once#include <stdio.h>#include <assert.h>#include <windows.h>typedef int DataType;typedef struct ListNode{ struct ListNode* pNext; DataType _data;}Node...原创 2018-10-04 16:39:26 · 224 阅读 · 1 评论 -
【数据结构】队列的公共部分,可以插入任意类型的元素
#include <iostream>#include <cassert>using namespace std;#define MAX_SIZE 8template<class T>class Queue{public: Queue(); //初始化 T _array[MAX_SIZE]; int _front; int _...原创 2018-09-25 23:05:25 · 784 阅读 · 0 评论 -
Linux进程的五个段(数据段、代码段、bss、堆栈段)
下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的。BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。...转载 2018-09-19 18:57:49 · 2342 阅读 · 0 评论 -
【数据结构】顺序队列
一、顺序队列的概念和分类1、概念:顺序队列的底层结构是数据存储元素的,用两个整形数字来表示队头和队尾的下标front和back2、顺序队列根据出入元素方式不同分为两种形式在这里插入图片描述二、代码展示1、队头不动编译环境VS2008Queue.h#pragma once #include <stdio.h>#include <assert.h>#...原创 2018-09-25 11:23:35 · 578 阅读 · 0 评论 -
【数据结构】链式队列的基本操作
概念:链式队列:特殊的单链表,只在单链表上进行头删和尾插操作1、首先链式队列需要一个一个节点构成,节点的结构是,有元素,有下一个节点的地址//定义一个节点typedef int DataType;typedef struct Node{ struct Node* _pNext; DataType _Data; }Node,*PNode;2、链式队列结构中有两个指针pHead...原创 2018-09-25 11:00:10 · 1492 阅读 · 0 评论 -
【数据结构】环形队列的基本操作
编译环境VS2008Queue.h####为了解决顺序队列的假溢出的问题,设计了环形队列#pragma once#include <assert.h>#include <stdio.h>#define MAX_SIZE 8typedef int DataType;typedef struct Queue{ DataType _array[MAX_S...原创 2018-09-24 17:01:28 · 1321 阅读 · 0 评论 -
栈的应用
编译环境vs2008Stack.h#pragma once #include <assert.h>#include <stdio.h>#include <string.h>//typedef int DataType; //基本操作使用//typedef char DataType; //括号匹配问题使用typedef int Data...原创 2018-09-24 16:56:31 · 227 阅读 · 0 评论 -
栈的基本操作
编译环境vs2008Stack.h#pragma once#include <assert.h>#include <stdio.h>typedef int DataType;#define MAX_SIZE 10typedef struct Stack{ DataType _array[MAX_SIZE]; int _size;}Stack;...原创 2018-09-24 16:49:20 · 171 阅读 · 0 评论 -
【C++笔记】C/C++函数调用约定
函数的调用约定常见的函数调用约定[5]:cdeclstacallfastcallthiscallnaked call1、__cdecl(C语言调用约定. The C default calling convention)C/C++缺省调用方式1)、压栈顺序:函数参数从右向左 2)、参数栈维护:由调用函数把参数弹出栈,传送参数的内存栈由调用函数来维护(正因为如此,实...转载 2018-06-20 11:45:42 · 619 阅读 · 0 评论 -
函数重载
一、函数1、前言:在编程时,一般是一个函数对应一种功能。但有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大值,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整型数。程序设计者往往会分别设计出3个不同名的函数,其原型为:int max1(int a,int b,int c);double max2(double a,double ...原创 2018-06-20 01:34:33 · 496 阅读 · 0 评论 -
this指针
一、概念1、什么是this指针?(1)、要了解this指针,首先要知道什么是类? 类是用户自己指定的类型,如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。(2)用类创建一个对象,这个对象就是类的实例,对于一个类的实例来说,可以看到它的成员函数,成员变量,但是它的本身呢?this是一个指针,他时时刻2、代码来进一步来了解this指针问题:实...原创 2018-06-16 03:15:33 · 428 阅读 · 0 评论 -
时间复杂度
1、概念时间复杂度之大O渐进表示法定义:一个算法语句总的执行次数是关于问题规模N的某个函数,记为f(N),N称为问题的规模。语句总的执行次数记为T(N),当N不断变化时,T(N)也在变化,算法执行次数的增长和f(N)的增长速率相同。则有T(N)=O(f(N)),称O(f(N))为时间复杂度的O渐进表示法。2、常见时间复杂度计算以下函数语句总执行次数与问题规模n的函数表达式:即时间复...原创 2018-04-10 03:14:29 · 367 阅读 · 0 评论 -
递归(函数的实现)
1.递归和非递归分别实现求第n个斐波那契数。非递归#include &lt;stdio.h&gt;void fib(int n){ int tt = n; int p1 = 1; int p2 = 1; int p3 = 1; while(tt&gt;2) { p3 = p1 + p2; p1 = p...原创 2018-03-22 02:08:45 · 945 阅读 · 0 评论 -
strlen函数的实现 以及出现的问题
strlen函数的实现size_t strlen(const char *string) //size_t是无符号整形#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;assert.h&amp;gt;int my_strlen(const char *str) //const在这里修饰是一大亮点 因为strlen函数只需计算字符串的长度,{ ...原创 2018-03-09 01:33:44 · 1837 阅读 · 0 评论 -
c语言操作符的总结
操作符 一、操作符的分类1. 算数操作符2. 位移操作符3. 位操作符4. 赋值操作符5. 单目操作符6. 关系操作符7. 逻辑操作符8. 条件操作符9. 逗号操作符10. 下标引用、函数调用和结构成员二、逐个讲解1、 算数操作符 + - *原创 2017-12-21 14:25:47 · 283 阅读 · 0 评论 -
利用指针把三个数从大到小输出(容易出现的问题)
下面的第一个程序是正确的做法 第二个是错误的做法#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>void swap(int *p1, int *p2);int main(){ int a = 0; int b = 0; int c = 0; scanf("%d%d%d",&a,&b,&c); pr原创 2017-12-11 23:14:35 · 1871 阅读 · 0 评论 -
C语言中求最大公约数的算法(三种)
1、相减法2、穷举法3、辗转相除法原创 2017-12-12 01:38:46 · 95883 阅读 · 5 评论 -
sizeof(...)运算符strlen(...)函数的区别与练习
一、sizeofsizeof(…)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。 它的功能是:获得保证能容纳实现所建立的最大对象的字节大小。 由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象原创 2017-12-13 01:52:10 · 504 阅读 · 0 评论 -
静态顺序表
//test.h#pragma once#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#define MAX_SIZE 10typedef int DataType;typedef struct SeqList { DataType _array[MAX_SIZE]; int _size; ...原创 2018-04-10 10:59:18 · 313 阅读 · 0 评论 -
手机通讯录小程序
实现一个通讯录通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人 main.c文件#define _CRT_SECURE_NO_WARNING...原创 2018-04-03 01:01:29 · 3274 阅读 · 1 评论 -
指针的深入理解
指针数组定义: 指针数组是数组,是一个存放指针的数组。 //下面哪个你认为是指针数组?int *arr1[10]; //这里[]的优先级高于*的,所以arr1//先于[]结合,所以这是一个数组,数组里面存的是int *类型char *arr1[4]; //也是一个指针数组,存的是char *类型数据char **arr3[5]; //也是一个指针数组,存放的// 是 c...原创 2018-03-28 19:44:13 · 346 阅读 · 0 评论 -
获取二叉树的结点,叶子节点,层数,以及k层结点个数
二叉树结点的个数(递归)int BinTreeSize(pBTNode pRoot){ if(NULL == pRoot) return 0; return BinTreeSize(pRoot-&gt;_pLeft)+BinTreeSize(pRoot-&gt;_pRight)+1;#if 0 int leftsize = 0; int ...原创 2018-05-07 02:18:53 · 5390 阅读 · 1 评论 -
二叉树的拷贝
递归的方法实现二叉树的拷贝//二叉树的拷贝pBTNode CopyBinTree(pBTNode pRoot){ pBTNode pNewRoot = NULL; if(pRoot) { //拷贝当前数的根节点 pNewRoot = BuyBinTreeNode(pRoot-&gt;_data); //拷贝根节点的...原创 2018-05-07 02:07:59 · 1579 阅读 · 0 评论 -
二叉树的创建
创建一个如图所示的二叉树一、创建的步骤1、使用一个字符串存入二叉树的所有元素,空缺位置使用一个符号表示(这里使用#号) 2、遍历字符串,如果字符串的元素不为”#”,则创建,按照前序的方法创建(根结点-&gt;左结点-&gt;右结点),知道把所有元素创建完。//编译环境VS2008BinTree.h#pragma once#include &lt;stdio...原创 2018-05-07 01:43:48 · 531 阅读 · 0 评论 -
链式队列(带头结点)
注意事项:带头结点的链式队列在出队列时,出最后一个元素的与出其它元素不同,出非最后一个元素,队尾指针不变,一直指向第一个元素,当出最后一个元素时,队尾指针改变指向队头(也就是指向头结点),认真看看这里(这个例子并没看到带头结点方便)//编译环境 VS2008Queue.h#pragma once#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;assert....原创 2018-04-27 01:07:02 · 3650 阅读 · 0 评论 -
链式队列(无头结点)
//环境 VS2008//Queue.h#pragma once#include &lt;stdio.h&gt;#include &lt;assert.h&gt;#include &lt;malloc.h&gt;typedef int DataType;typedef struct Node{ struct Node* _Pnext; DataType _...原创 2018-04-27 00:56:27 · 2083 阅读 · 0 评论