C语言学习
文章平均质量分 83
C语言学习
Living_Amethyst
每天都该保持前进
展开
-
实用调试技巧
调试(英语:Debugging / Debug),又称除错,是发现和减少计算机程序或电子仪器设备中程序 错误的一个过程。目录一.Debug和Release的介绍:二.实用的调试技巧三. 学会快捷键四.如何写出好(易于调试)的代码一.Debug和Release的介绍:Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。 Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 ...原创 2021-11-21 19:34:50 · 781 阅读 · 0 评论 -
选择排序
一.选择排序 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。算法步骤:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。重复第二步,直到所有元素均排序完毕。二.理解选择排序三.代码实现//选择排序#include<stdio.h>int mai...原创 2021-12-07 21:25:08 · 573 阅读 · 0 评论 -
指针进阶
之前我们初步学习了指针的有关知识,也就是初阶指针,我们已经知道了指针的概念:1. 指针就是个变量,用来存放地址,地址唯一标识一块内存空间。2. 指针的大小是固定的4/8个字节(32位平台/64位平台)。3. 指针是有类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限。今天,我们将继续探讨指针的高级主题本章的重点是1. 字符指针2. 数组指针3. 指针数组4. 数组传参和指针传参5. 函数指针6. 函数指针数组7. 指向函数指针数组的指针8. 回调函原创 2022-01-20 21:12:31 · 722 阅读 · 13 评论 -
自定义类型:结构体,枚举,联合
本章重点结构体结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段(位段的填充&可移植性)枚举枚举类型的定义 枚举的优点 枚举的使用联合联合类型的定义 联合的特点 联合大小的计算一.结构体1.结构体类型的声明结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量结构的声明struct tag{member-list;}variable-list;(注..原创 2022-01-23 18:06:11 · 151 阅读 · 11 评论 -
动态内存管理
一.为什么存在动态内存分配我们已经掌握的内存开辟方式有:int val = 20;//在栈空间上开辟四个字节char arr[10] = {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的方式有两个特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道。那数组的编译时开辟空间的方式就不能满足了。这时候就只能试试动态存开辟了.原创 2022-01-24 23:02:52 · 129 阅读 · 0 评论 -
写一个通讯录小程序
通讯录:可以存放1000个人的信息 人的信息:名字,年龄,电话,住址,性别 增加联系人 删除联系人 查找联系人 修改联系人 排序(名字/年龄)原创 2022-01-24 23:07:13 · 942 阅读 · 1 评论 -
文件操作
本章重点为什么使用文件 什么是文件 文件的打开和关闭 文件的顺序读写 文件的随机读写 文本文件和二进制文件 文件读取结束的判定 文件缓冲区 目录1.为什么使用文件?2.什么是文件2.1程序文件2.2 数据文件2.3 文件名3.文件的打开和关闭3.1文件指针3.2 文件的打开和关闭4. 文件的顺序读写4.1 对比一组函数:5. 文件的随机读写5.1 fseek5.2 ftell5.3 rewind6....原创 2022-02-06 23:13:46 · 220 阅读 · 0 评论 -
程序环境和预处理
本章重点:程序的翻译环境 程序的执行环境 详解:C语言程序的编译+链接 预定义符号介绍 预处理指令 #define 宏和函数的对比 预处理操作符#和##的介绍 命令定义 预处理指令 #include 预处理指令 #undef 条件编译 1. 程序的翻译环境和执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。2. 详解编译+链接2.1 翻译环...原创 2022-02-12 15:54:14 · 161 阅读 · 2 评论 -
指针和数组面试题的解析
指针和数组笔试题解析一维数组//一维数组int a[] = {1,2,3,4};printf("%d\n",sizeof(a));printf("%d\n",sizeof(a+0));printf("%d\n",sizeof(*a));printf("%d\n",sizeof(a+1));printf("%d\n",sizeof(a[1]));printf("%d\n",sizeof(&a));printf("%d\n",sizeof(*&a));printf原创 2022-01-21 21:53:07 · 661 阅读 · 6 评论 -
字符串函数和内存函数
本章重点介绍处理字符和字符串的库函数的使用和注意事项C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串或者字符数组中。字符串常量 适用于那些对它不做修改的字符串函数.一.strlen函数:获取字符串长度size_t strlen ( const char * str );字符串以'\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数注:参数指向的字符串必须要以 '\0' 结束。 注...原创 2022-01-23 19:09:04 · 511 阅读 · 1 评论 -
关键字static
目录一.static 修饰变量1.static修饰局部变量2.static修饰全局变量二.static修饰函数 我们知道,在C语言中,关键字static是很常见的,它的用法比较灵活,它可以提高程序的模块化特性,方便进行扩展和维护,那么今天我们就来说一说关键字static C语言中static可修饰:变量 函数一.static 修饰变量变量分为局部变量和全局变量,而static修饰它们时,各自的特点是不一样的,下面分别叙述1.static修饰局部...原创 2021-10-24 15:07:17 · 175 阅读 · 3 评论 -
几个和循环有关的练习题
上一篇文章我们讲了三个循环的使用方法和各自的特点,为了能够熟练地掌握这个循环,这篇文章我们通过几个题目加以巩固目录一.计算n的阶乘二.计算 1!+2!+3!+……+10!三.在一个有序数组中查找具体的某个数字n (二分查找)四.编写代码,演示多个字符从两端移动,向中间汇聚。一.计算n的阶乘我们首先来分析一下这个题目,大概可分为 三个步骤:输入一个数字n 产生1~n的数字,并且累积乘在一起 将结果打印出来#include...原创 2021-10-30 23:44:59 · 503 阅读 · 9 评论 -
C语言实现入门级小游戏
上一期咱们用C语言实现了三子棋的小游戏 C语言实现三子棋 今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是玩扫雷的高手。其实扫雷和三子棋有许多相似之处,都需要用到数组的知识。 今天的扫雷也是相当有趣的由于博主是一个编程学习的小白,所以这只是扫雷的初级版,此版本有一些功能还无法实现,在后续的学习中,我会持续更新,不断对这个小游戏进行优化,期待大家的关注,还有,这篇文章中若有错误或不当的地方,欢迎大家指正!关于这个扫雷项目的代码,.........原创 2021-11-10 20:11:03 · 16348 阅读 · 23 评论 -
模拟实现库函数:strcpy(一步步走向完美)
上一期我们强调了调试的重要性,以及说明了如何使自己写的代码更好,那么现在我们就来实战演练一下,看一下我们是如何让代码一步步走向完美的 我们的题目是模拟实现库函数:strcpy我们先看一下strcpy函数的介绍我们发现,它的功能是拷贝一个字符串,并且它是有返回值的我们先来使用一下这个库函数来熟悉一下#include<string.h>int main(){ char arr1[20] = { 0 }; char arr2[] = "...原创 2021-11-21 19:33:41 · 1283 阅读 · 3 评论 -
循环语句(while,for,do...while)
写这篇文章,我深有感触,在写代码的过程中,我们经常会出现最后的结果达不到我们预期的效果的情况,我们一定一定要耐下心来,一步一步地去思考,是哪里出了问题,怎么能解决问题,这样的一个过程是十分重要的,是能让我们越来越接近真相的过程。学习编程的路肯定不是一帆风顺的,但我们要有能够克服任何苦难的决心,这是最重要的。在这篇文章中,我们将会对循环语句有一个更加深入的了解并且我们还能了解到getchar与putchar的相关知识 让我们开始吧!一.while循环1.while循环语法...原创 2021-10-29 23:57:04 · 5091 阅读 · 11 评论 -
结构体详解
今天咱们来说一说结构体为什么要有结构体因为在实际问题中,一组数据往往有很多种不同的数据类型。例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄,char型的性别,float型的成绩。又例如,对于记录一本书,需要 char型的书名,char型的作者名,float型的价格。在这些情况下,使用简单的基本数据类型甚至是数组都是很困难的。而结构体(类似Pascal中的“记录”),则可以有效的解决这个问题。结构体本质上还是一种数据类型,但它可以包括若干个“成原创 2021-11-20 13:51:00 · 1131 阅读 · 0 评论 -
函数的递归
函数递归这是本章的重点内容一.什么是递归? 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。简单理解递归与循环:递归:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一...原创 2021-11-03 20:31:37 · 6604 阅读 · 10 评论 -
函数的基本使用
本章主要掌握函数的基本使用和递归1. 函数是什么2. 库函数3. 自定义函数4. 函数参数5. 函数调用6. 函数的嵌套调用和链式访问7. 函数的声明和定义8. 函数递归一.函数是什么数学中我们常见到函数的概念。但是你了解C语言中的函数吗?维基百科中对函数的定义:子程序在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),..原创 2021-10-31 20:53:37 · 336 阅读 · 0 评论 -
指针(初阶)
指针,是C语言中的一个重要概念及其特点,也是掌握C语言比较困难的部分。指针也就是内存地址,指针变量是用来存放内存地址的变量,在同一CPU构架下,不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。有了指针以后,不仅可以对数据本身,也可以对存储数据的变量地址进行操作今天我们分几个步骤来学习一下指针(初阶版本)一.指针是什么? 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直...原创 2021-11-19 00:27:14 · 732 阅读 · 5 评论 -
数组
一.一维数组。1.数组的创建数组是一组相同类型元素的集合。 数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型 //const_n 是一个常量表达式,用来指定数组的大小注意:const_n是一个常量表达式我们来看几个数组创建的实例://代码1int arr1[10];//代码2int n = 10;int arr2[n];//数组时候可以正常创建?//代码3char arr3[10]...原创 2021-11-05 16:14:20 · 879 阅读 · 1 评论 -
分支语句(if,switch)
本章重点学习分支语句和循环语句。首先我们需要知道的是在C语言中,语句可分为以下五类:表达式语句 函数调用语句 控制语句 复合语句 空语句其中控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。而控制语句可分为三类条件判断语句(分支语句):if语句,switch语句; 循环执行语句:do while语句,while语句,for语句; 转向语句:break语句,goto语句,continue语句,return语句;...原创 2021-10-26 23:26:22 · 2408 阅读 · 7 评论 -
C语言实现入门级小游戏——三子棋
今天博主将为大家带来C语言入门级小游戏——三子棋(井字棋)的详细介绍,希望这篇文章对大家能有帮助。 在编程的学习过程中,编写一些中这样的小游戏,是非常有乐趣的事情,完成之后会非常非常有成就感,我们需要这样的小项目来提高对编程学习的信心,培养对编程的兴趣,由于博主是一个编程学习的小白,所以这只是三子棋的初级版,此版本只能实现人机对战,并且电脑随机下棋,电脑的算法比较低级,在后续的学习中,我会持续更新,不断对这个小游戏进行优化,期待大家的关注,还有,这篇文章中若有错误或不当的地...原创 2021-11-09 01:22:50 · 9708 阅读 · 11 评论 -
#define定义常量和宏 and 初步认识指针
今天介绍一下#define定义常量和宏,并且初步地认识一下指针一.#define 定义常量和宏1.define定义标识符常量//#define 定义标识符常量#define M 100;#define STR "hello";int main(){ printf("%d\n", M); printf("%s\n", STR); return 0;}2.#define定义宏//#define 定义宏#define ADD(X,Y) ((X)+(Y))int原创 2021-10-24 16:53:09 · 536 阅读 · 5 评论 -
冒泡排序
一.介绍冒泡排序 冒泡排序(Bubble Sort是一种计算机科学领域的较简单的排序算法 它重复地走访过要排序的元素列,一次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。冒泡排序的原理...原创 2021-11-07 20:11:38 · 166 阅读 · 1 评论 -
初识C语言 2021.10.17
目录一.第一个C语言程序二.数据类型三.变量、常量四.字符串+转义字符+注释一.第一个C语言程序#include <stdio.h>int main(){ printf("hello world\n"); return 0;}解释://main函数是程序的入口//一个工程中有且仅有一个main函数二.数据类型char //字符数据类型 1字节short ...原创 2021-10-17 14:55:45 · 254 阅读 · 3 评论 -
初步认识结构体
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。 比如我们来描述一个学生,其中要描述的有:名字+年龄+性别+学号这几项信息,这里就可以使用结构体,#include <stdio.h>struct stu{ //结构体的成员 char name[20];//名字 int age;//年龄 char sex[10];//性别};;int main(...原创 2021-10-24 20:44:19 · 1950 阅读 · 4 评论 -
超详细的操作符解析
还记得之前对操作符进行了简单的了解,并且学习了一些常见操作符的用法,如今我们又对操作符这部分的知识进行了更深一步的学习,有了一些新的感悟和体会,这篇文章我希望能把关于操作符的方方面面,包括一些细微之处,都说到位。 话不多说,让我们开始吧!一.操作符分类操作符有哪些?可以分为几类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员接下来我们对这些操作符一一进行阐述!二.算术操作...原创 2021-11-12 01:32:22 · 843 阅读 · 10 评论 -
C语言系列之初识C语言(二)2021.10.19
今天的学习容量有些大,此处有必要梳理一下今天所学内容。目录一.初识选择语句二.初识循环语句三.函数四.数组五.操作符六.关键字一.初识选择语句人生中会遇到很多次选择,无论对错,都不应该后悔曾经做过的选择选择语句,如下#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main(){ int input = 0; printf("你要好好学习吗?(1/0)"); sc...原创 2021-10-20 00:53:28 · 491 阅读 · 8 评论 -
goto语句
goto语句C语言中提供了可以随意滥用的 goto语句和标记跳转的标号。从理论上 goto语句是没有必要的,实践中没有goto语句也可以很容易的写出代码。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过程。例如:一次跳出两层或多层循环。 多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环。我们先用一个简单的代码来了解一下goto语句结果死循环:打印hehe,haha下面是使用goto语句...原创 2021-10-31 18:06:35 · 1210 阅读 · 2 评论