![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言学习历程
文章平均质量分 66
viafcccy
reality is malleable.
展开
-
(*visit)(TElemType e )函数指针理解
基础知识函数指针 的本质是一个指针,该指针的地址指向了一个函数,所以它是指向函数的指针。我们知道,函数的定义是存在于代码段,因此,每个函数在代码段中,也有着自己的入口地址,函数指针就是指向代码段中函数入口地址的指针。函数指针的声明方法为:返回值类型 ( *指针变量名) ([形参列表]);注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了...原创 2019-10-27 13:13:27 · 12730 阅读 · 3 评论 -
C 文件读写(二进制文件)
我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FIL...转载 2018-12-10 23:11:31 · 3338 阅读 · 0 评论 -
数据结构-线性表之单链表(头插法和尾插法)【上】
有兴趣利用链表写贪吃蛇的看这篇https://blog.csdn.net/viafcccy/article/details/84483828数据结构-线性表之单链表(头插法和尾插法)【下】在这里https://blog.csdn.net/viafcccy/article/details/84483828因为头插法算法较为简单这里就用头插法作为案例 相较于顺序表的优点:1、不用定义...原创 2018-12-16 23:28:52 · 4190 阅读 · 1 评论 -
C语言运算符优先级
c语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- ...转载 2018-12-06 09:37:51 · 223 阅读 · 0 评论 -
c语言指针进阶(三)
指针与内存四区理解的强化1)主调函数 被调函数主调函数可把堆区栈区全局区的数据内存地址传给被调函数被调函数只能返回堆区 全局数据2)内存分配方式指针做函数参数 是有输入输出特性的输入指的是 在主函数分配内存 在子函数修改输出指的是 在子函数分配内存 然后将修改后的指针扔出来 主函数定义一个指针去接char *f(int num){ int ret = 0...原创 2018-12-06 11:57:33 · 330 阅读 · 0 评论 -
c语言二级指针
二级指针做输入_第1种内存模型 直接利用二级指针首先看指针数组(变量为指针) 也就是数组中存的都是地址#include<stdio.h>void main(){ int i = 0, j = 0; int num = 0; char *myArray[] = {"aaaaaa","cccccc","bbbbbb","111111"};//这里定义的是指针所指...原创 2018-12-13 09:51:41 · 2444 阅读 · 0 评论 -
指针的释放
正确的释放指针的方法避免野指针的产生 #include <stdio.h>#include <string.h>#include <stdlib.h>int getMem(char **myp1, int *mylen1, char **myp2, int *mylen2){ char *tmp1 = NULL; char *tmp...原创 2018-12-12 18:42:11 · 12645 阅读 · 2 评论 -
c语言指针进阶总结
1,指针铁律 1.1,指针是一种数据类型 1, 指针也是一种变量,占有内存空间,用来保存内存地址。 指针既然是变量也要占用内存大小。一级指针的大小于其类型有关,二级以及二级以上的指针的大小是四个字节(32位机) 2,*p操作内存 ...原创 2018-12-05 15:12:15 · 806 阅读 · 0 评论 -
c语言对字符串逆序反转去除空格
strstr_while模型看这篇https://blog.csdn.net/viafcccy/article/details/84886885两头堵模型将一个这种形式的“ zxcv ”求出多少个空格并且去除这里要用到一个isspace() 若参数c为空格字符,则返回TRUE,否则返回NULL(0)。就是这么简单 思路大概是这样通过指针从...原创 2018-12-08 17:16:18 · 799 阅读 · 0 评论 -
c语言寻找指定字符串的程序(程序利用指针完成封装)
一定要注意注释了*的位置 我调试了好久才发现自己没有分配内训指针定义完一定要记得三选一 1.去null了 2.分配内存 3.指向特定的位置还有就是宕机基本本质上都跟错误的操作内存有关还有就是关于字符串的输出问题首先下面的是正确的但是可以发现这样写编译器会自动输出指针指向的位置之后这个字符数组(字符串)的所有字符#include <stdio.h>#incl...原创 2018-12-07 21:02:42 · 651 阅读 · 1 评论 -
c语言字符串
c语言字符串都是以“/0”结尾而这里就有三个概念 EOF /0 -1 /n首先c语言中所有字符串的结尾标志都是/0 是字符串结尾的标志 它是一种转义符 而EOF是文件流结束标志代表着 文件(file),也可以是标准输入(stdin)的输入结束 而我们都知道大多数程序EOF的传递是靠-1这个返回值控制的 就相当于 #define EOF (-1) (在stdio.h中是这样定义的) 而'...原创 2018-12-05 14:04:48 · 36489 阅读 · 3 评论 -
c语言const用法总结
这里讲的是c中的const不是cpp中的int const a 等价于 int const bchar * const p 表示指针变量p中的地址不可被修改const char *p 表示指针p指向的内存空间不可被修改const chat * const p 表示指针变量和指向的内存空间都不可被修改 但是在c语言中const其实是个伪命题 因为它只是将变量设为不可修改 也...原创 2018-12-11 11:32:18 · 1499 阅读 · 0 评论 -
C语言中的单引号和双引号的区别
首先肯定地说,二者是有区别的,不是说用谁都一样。1、实质区别,代表的含义不同'A'代表的是一个整数,而且这个整数对应的是编译器所采用的字符集中的字符序列对应的数值。所以'A'跟ASCII中的65意义是相同的。 1 # include <iostream> 2 3 using namespace std; 4 5 int main(int argc, c...转载 2018-12-10 23:40:31 · 6382 阅读 · 0 评论 -
c语言消除游戏(带排行榜)
程序截图先来看下思路1.初始化窗口2.开始游戏利用方向键移动光标对于可以消除的情况的判断记录相同颜色的位置小球下降补充新的小球记录分数3.如果计时结束后显示游戏结束4.释放资源首先我们需要graphics头文件 需要使用easyxhttps://docs.easyx.cn/帮助文档和下载地址在这里具体函数的用法可以看帮助文档自己查...原创 2018-12-12 14:17:51 · 8272 阅读 · 14 评论 -
c语言指针NULL陷阱
#include<stdio.h>#include<stdlib.h>void f(int * a){ *a = 1;}int main(){ int * a = NULL; f(a); printf("%d",a); return 0;}这样显然不行 因为实际上没有为a开辟内存下面我们开辟内存#include<...原创 2019-06-05 01:05:24 · 1043 阅读 · 5 评论 -
数据结构-串ADT(字符串 完成头文件string.h的实现)
串的比较实际上比较的是字符编码,这里正好深入了解一下字符编码 :ASCII 编码ASCII占用8位(bit)。8个bit可以表示256个字符。ASCII码只规定了128个字符的编码。ASCII码的问题是字符太少,不能满足世界各国的需要。所以各国其他编码利用剩余的128个字符定义各自不同的编码。GB2312 & GBK汉字GB2312 使用两个字节(16位),...原创 2019-06-05 00:52:21 · 1338 阅读 · 0 评论 -
树的基本概念
原创 2019-06-06 23:52:16 · 202 阅读 · 0 评论 -
KMP算法——病毒算法
#include<stdio.h>#include<stdlib.h>#include<string.h> //状态码#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define EQ 0#define GT 1#define EQ 0 //相等 ...原创 2019-06-06 19:57:22 · 3138 阅读 · 0 评论 -
KMP算法基础详解
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。例如下面的主串与子串...原创 2019-06-06 12:15:49 · 377 阅读 · 0 评论 -
BF算法-串的模式匹配
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。这里我们来详细讲一下 算法的核心思想1.从主串第一个字符开始匹配2.如...原创 2019-06-06 00:53:05 · 1257 阅读 · 0 评论 -
extern、定义和声明
Extern的问题在于不知道这个关键词出现的时候到底是声明还是定义。谨记:声明可以多次,定义只能一次。对于变量来说,定义就是声明.例如: int a; 我们可是说它是定义也可以说它是声明。但是对于函数来说定义和声明完全不是一回事 。void sum(int a,int b);这是函数的声明void sum(int a,int ...原创 2019-03-07 11:41:23 · 4428 阅读 · 0 评论 -
c语言clock()计时函数(结果很精准)
#include<stdio.h>#include<time.h>clock_t start, stop; //clock_t为clock()函数返回的变量类型double duration;int main(){ start=clock(); //****************************** //*这里写你所要测试运行...原创 2018-12-25 23:28:30 · 36199 阅读 · 5 评论 -
二维数组与指针
首先我们要知道数组名 或者 字符串名代表的是一个地址 也就是首地址但是这个地址的长度在同一台电脑是一样长的但是它所代表的步长不一样 也就是一个int指针+1会跳跃32位 而一个double会跳跃64位 因此重要的是理解指针与数组的关系 要明白指针是怎样跨越的 步长是多少先看这样一段代码void main(){ int a[3][3] = {1,2,3,4,5,6,7,8,...原创 2019-01-04 13:18:08 · 309 阅读 · 0 评论 -
c语言static关键字详解
C语言代码是以文件为单位来组织的,在一个源程序的所有源文件中,一个外部变量(注意不是局部变量)或者函数只能在一个源程序中定义一次,如果有重复定义的话编译器就会报错。伴随着不同源文件变量和函数之间的相互引用以及相互独立的关系,产生了extern和static关键字。 下面,详细分析一下static关键字在编写程序时有的三大类用法: 一,static全局变量 ...转载 2018-12-27 22:17:04 · 750 阅读 · 0 评论 -
c语言指针进阶(二)
指针不断的改变指向和多个指针操作一个内存空间首先这里强调一个问题就是假设我现在知道一个内存地址0xaa11 我怎样将这个地址直接给一个指针呢? 首先这样是没有语法错误的 确实也是这样定义的 但是地址我们是不能随便规定的 这个主要用于程序开发中我们向特定的地址(我们已知的地址)去写入数据(例如:通过I2C接口发送到MCU一个地址数据(unsigned char AdData),一个待...原创 2018-12-03 23:20:55 · 343 阅读 · 0 评论 -
c语言函数调用模型
对于内存四区不懂得戳这里 内存讲解这篇文章需要知道内存四区的知识首先分级调用函数 使需要的数据入栈然后逐级出栈,返回数值,将栈区的内存进行释放 在main函数执行完之前 fa fb 都可以调用main函数在堆栈全局区的内存fb申请的内存fa main可以使用吗?1.fb在栈上分配的内存不能被main fa使用2.fb在堆上malloc的可以使用...原创 2018-12-01 14:05:04 · 990 阅读 · 0 评论 -
c语言指针进阶-内存的理解
看完内存后最好能看完这篇函数调用模型将函数怎样使用内存有一个深刻的认识 首先如图内存分四区 栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表 全局区(静态区)(static...原创 2018-11-30 14:02:35 · 786 阅读 · 0 评论 -
c语言graphics.h头文件介绍
graphics.h是画图的头文件如果没有easyx这个软件可以安装头文件链接:https://pan.baidu.com/s/19Vyh-GRH3GRCg8JaQG5z_g 提取码:k3y2 只可以.cpp实例:#include<stdio.h>#include<graphics.h>#include<conio.h>int ma...原创 2018-11-21 20:51:51 · 32293 阅读 · 3 评论 -
c语言conio.h和stdio.h函数
conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 来源百度百科 https://baike.baidu.com/item/conio.h/2912801?fr=aladdingetch()与getchar()的主要区别是getch()不用回...原创 2018-11-21 19:20:50 · 3254 阅读 · 0 评论 -
c语言头文件stdlib.h和time.h头文件详解
rand() (这个函数我之前关于数组的博客写到了https://blog.csdn.net/viafcccy/article/details/83960390)srand(unsigned t)埋下时间种子实例:int random1; srand(time(0));//等效于srand(time(null)); random=rand()%1...原创 2018-11-20 23:12:58 · 2918 阅读 · 0 评论 -
c语言指针,return以及函数返回值
指针作为c语言的精华所在所以会多学习几天来扎实的掌握void* 这不叫空指针,这叫无确切类型指针.这个指针指向一块内存,却没有告诉程序该用何种方式来解释这片内存.所以这种类型的指针不能直接进行取内容的操作.必须先转成别的类型的指针才可以把内容解释出来. 还有'\0',这也不是空指针所指的内容. '\0'是表示一个字符串的结尾而已,并不是NULL的意思. 真正的空指针是说,这个指针没有指向一...原创 2018-11-15 00:00:10 · 32465 阅读 · 2 评论 -
C中的预编译宏定义
在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在...转载 2018-11-18 20:50:17 · 834 阅读 · 0 评论 -
C/C++ typedef用法详解
第一、四个用途用途一:定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char ...转载 2018-11-18 20:48:16 · 726 阅读 · 0 评论 -
c语言结构体 链表
单链表 尾插法 头插法 看这篇https://blog.csdn.net/viafcccy/article/details/84502334 https://blog.csdn.net/viafcccy/article/details/85041942单链表实现贪吃蛇看这篇https://blog.c...原创 2018-11-16 00:01:30 · 28548 阅读 · 1 评论 -
c语言数组
数组中a[i][j]代表第i+1行的第j+1个数定义数组时以下面的问题为例a[5][5]代表生成一个5*5的大小的矩阵而引用时切记第一行第一个数为a[0][0]以此类推随机生成一个[5][5]的数组,使第一行与第五行调换位置,并找到此行的最大值或最小值顺便讲一个小知识关于电脑中的随机数1.计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。其实绝对随机的随机数只是一种。...原创 2018-11-11 17:40:50 · 746 阅读 · 0 评论 -
c语言函数
设计一个函数f,求二个数的最大公约数int f(int x,int y);设计一个函数g,求二个数的最小公倍数int g(int x,int y);从键盘输入一个整数,设计一个函数inNumber,若为正正数则返回它,否则直到得数>0为止有个公式就是a*b/最大公约数就是最小公倍数所以只要求最大公约数即可函数的形参写在函数名的位置和写在函数内是一样的,只是写在外面具有对...原创 2018-11-13 11:52:40 · 1702 阅读 · 0 评论 -
c语言多层嵌套语句的例子和理解方法-大中小马拉货过河问题
vc++6.0中for循环只能int a;for(a=1,a<10,a++);不能 for(int a = 1,a<10,a++);否则会报错//题目 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮一担。有多少种解法?并打印每种解法。//每种解法是否有某种马的数量为0只需要改变big middle small变量的初始值即可//以下是三...原创 2018-11-09 12:26:47 · 1594 阅读 · 1 评论 -
c语言判断一个年份是否是闰年
思路是将年份分别除以4,100,400的余数分别存在four,hundred,fourhundred变量中然后只有两种情况是闰年其他不是#include <stdio.h>void main(){int four , hundred , fourhundred , year;scanf("%d",&year);four = year % 4;hundred =...原创 2018-11-01 23:35:25 · 4922 阅读 · 0 评论 -
define和typedef的区别
1.#define是在预编译时候处理的,它只是简单的字符替换2.typedef在编译阶段处理,不是简单的替换处理,而是采用如同定义的方法处理3.typedef有利于程序的移植和通用如果还有别的欢迎评论 或者我以后接着学习的过程中还有别的认识会继续更新 ...原创 2018-11-22 09:03:02 · 129 阅读 · 0 评论 -
指针的长度是多少呢?由什么决定呢?
首先,介绍几个基本概念: 1、字长:在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。二进制的每一个0或1是组成二进制的最小单位,称为一个比特(bit)。 一般说来,计算机在同一时间内处理的一组二进制数称为一个计算机的“字”,而这组二进制数的位数就是“字长”。字长与计算机的功能和用途有很大的关...原创 2018-11-22 12:55:29 · 12684 阅读 · 1 评论