![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 70
Lockey-s
这个作者很懒,什么都没留下…
展开
-
柔性数组——让程序运行更快!
柔性数组什么是柔性数组柔性数组使用举例使用柔性数组的优势什么是柔性数组柔性数组是C语言 C99 语法当中提出来的,结构体中的最后一个元素是未知大小的数组。结构中的柔性数组成员前面必须至少一个其他成员。sizeof 返回的这种结构体大小不包括柔性数组的内存。包含柔性数组成员的结构用 malloc 函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。例如:struct st_type{ int i; int a[];//柔性数组成员 表示数组的大小是不确定原创 2021-10-04 18:34:34 · 196 阅读 · 1 评论 -
空间用多少我说了算! C语言动态内存!
空间大小我说了算--动态内存为什么存在内存分配malloc 开辟空间 free 释放空间mallocfreecalloc 开辟空间realloc 管理内存realloc 调整内存的两种情况情况1:原有空间之后有足够大的空间原有空间之后没有足够大的空间realloc 使用代码示例为什么存在内存分配我们之前学的内存分配,都是直接开辟内存。但是这样有一个问题:我们开辟的内存是大了还是小了,会不会浪费,会不会不够用。有的程序只有在运行的时候才知道要用多少空间。所以为了解决这样的问题,我们就有了内存的动态开辟。原创 2021-10-02 15:14:27 · 211 阅读 · 7 评论 -
指针?数组?来几道笔试题!
指针、数组的笔试题指针和数组笔试题一维数组字符数组二维数组总结:指针笔试题笔试题1:笔试题2:笔试题3:笔试题4:笔试题5:笔试题6:笔试题7:笔试题8:这次的讲解是按照32位平台来讲解的。指针和数组笔试题一维数组int a[] = {1,2,3,4};printf("%d\n",sizeof(a)); //16printf("%d\n",sizeof(a+0)); //4printf("%d\n",sizeof(*a)); //4printf("%d\n",sizeof(a+1原创 2021-09-14 17:43:08 · 194 阅读 · 3 评论 -
三子棋?玩我自己的!
三子棋实现思路项目分布测试文件头文件函数实现运行展示实现思路三子棋是由9个格子组成的,横竖斜三个棋子都相同就赢了。所以我判断输赢的时候就按照这个去判断就好了。电脑下棋我们还是用时间作为随机数的生成器。项目分布对于三子棋,我们还是选择将代码分为三部分:测试部分、头文件部分、函数实现部分。测试文件在这里写好游戏的开始,先有一个菜单,因为玩家可能要玩好多次,所以使用 do-while 循环来实现玩家的多次游戏。并且设置一个实现游戏主体的 game 函数。在 game 函数里面完成:对棋盘的初始化原创 2021-08-26 18:39:37 · 1112 阅读 · 4 评论 -
扫雷?拿来吧你!
实现简易扫雷扫雷概述原理工程分布代码实现测试文件游戏函数主体框架定义数组长宽游戏主体测试文件代码头文件代码函数的实现棋盘的初始化棋盘的显示布置雷获得雷的个数排查雷函数实现代码游戏效果扫雷概述大家都玩过扫雷吧,如果你没玩过,不要慌,我准备了 在线扫雷 我们今天实现的就是一个简单版本的扫雷。原理我们是通过两个个二维数组来实现。第一个二维数组来存放雷的信息,第二个二维数组用来展示给玩家,让玩家选择。因为要统计周围八个位置的雷的个数,所以存放雷信息的数组应该比展示雷的数组大一圈,这样统计雷的个数的时候就不会原创 2021-08-25 12:04:23 · 1792 阅读 · 6 评论 -
深入了解C语言-数据的存储
深度了解数据在内存中的存储C语言当中使用的数据类型使用的类型整型类浮点类型内存当中的存储原码、反码、补码大小端什么是大小端浮点数的存储浮点数的存储浮点数的存储规则指数 E 从内存当中取出C语言当中使用的数据类型使用的类型char 字符数据类型short 短整型int 整形long 长整型long long 更长的整形float 单精度浮点数double 双精度浮点数这些里面又分为整型和浮点型整型类整型又分为有符号整型和无符号整型,[int]原创 2021-08-14 21:18:07 · 245 阅读 · 4 评论 -
C语言结构体
结构体什么是结构体,结构体怎么来的结构体的创建结构体的输出main函数内使用结构体结构体传参什么是结构体,结构体怎么来的结构体是一些值的集合,是用户自定义的类型。里面包含了一些值,这些值被称为成员变量。结构体的每个成员变量可以是不同类型的变量。结构体的关键字是 struct ,结构体的大括号后面一定要有分号。结构体的创建现在创建一个学生的结构体:有年龄,名字,id 。并且对其赋初值struct Stu{ int age; char name[20]; int id;};int mai原创 2021-08-13 11:44:18 · 2251 阅读 · 2 评论 -
内功修炼-深入了解函数栈帧
函数栈帧基础铺垫局部变量是怎么创建的三级目录基础铺垫函数栈帧的创建和销毁,在不同编译器,不同环境下有区别。寄存器 eax ebx ecx edx ebp esp要理解函数栈帧就必须理解 ebp esp 这两个寄存器中存放的是地址是用来维护函数栈帧的。每一个函数调用,都要在栈区创建一个空间。压栈(push)就是从栈区的顶上放一个元素进去,从顶上删除一个元素就叫出栈(pop)。寄存器是独立于内存的,是在cpu上面的。操作工具是vs2013,因为vs2013可以看到栈帧的详细过程。局原创 2021-08-11 21:13:14 · 472 阅读 · 6 评论 -
一文带你了解C语言指针
指针什么是指针指针的应用指针 +- 整数指针 + 指针指针 - 指针野指针野指针成因指针和数组指针 +- 和数组的关系二级指针什么是指针指针是应该对象,可以直接指向电脑存储器中的某个地方,这个地方就是内存单元,指针指向的是一个对象的地址。地址的指向就是内存单元,一个内存单元是一个字节,在32位平台上面,一个指针是4个字节。因为32位的平台有32根地址线,每根地址线是 1 bit,所以32位平台的指针大小是 4 个字节。同理,64位平台的指针大小就是 8 个字节。指针的应用指针用于指向某个对象的地址,原创 2021-08-07 18:42:15 · 583 阅读 · 1 评论 -
C语言操作符详解
操作符操作符分类算术操作符移位操作符左移操作符右移操作符位操作符按位与 &按位或 |按位异或 ^赋值操作符单目操作符sizeof 和 数组关系操作符逻辑操作符条件操作符逗号表达式下标引用和函数调用下标引用操作符 []函数调用操作符()操作符分类算术操作符 + - * / %移位操作符 >> <<位操作符 | & ^赋值操作符 =单目操作符 ! & ...关系操作符 > >= < <= != ==逻原创 2021-08-03 21:44:20 · 160 阅读 · 1 评论 -
C语言数组详解
数组分类一维数组数组的创建数组的初始化数组的存储二维数组二维数组的创建和初始化二维数组的存储数组越界数组作为函数参数一维数组数组的创建数组就是一类相同元素的集合。数组的创建要有元素类型,数组名,数组的大小,数组初始化。数组创建时可以不初始化,但是要指定大小。也可以不指定大小,但是要初始化。数组名可以随意指定,但是不要与关键字相同。数组的大小一定是常量下面就是几个创建数组的实例int arr1[10];char arr2[10];float arr3[10];double arr4[10]原创 2021-07-30 21:44:13 · 594 阅读 · 8 评论 -
C语言初级排序之冒泡排序
冒泡排序的原理作为排序算法的一种,冒泡排序的算法是将两个相邻元素进行比较,假设我们这里是按从小到大排列。如果相邻两个元素的第一个比第二个大,那就将这两个进行交换。如果不是,就继续往右移。 如图:这里先比较 3 和 5 发现 3 比 5 小,所以继续比较 5 和 8 ,还是这样,继续比较 8 和 9 , 依然一样。继续比较,这次是 9 和 6 比较,发现 9 比6 大,所以将 9 和 6 的值继续交换。这样交换之后,继续让 9 和别的元素进行比较,最后就能把 9 放到最后一个位置。这样就是一趟冒泡排原创 2021-07-28 22:08:10 · 407 阅读 · 2 评论 -
C语言 X 递归
递归是什么?递归就是程序自身地调用自己,也是一种算法,递归式将一个大型复杂发问题转化为类似的小型问题。而且用的代码量较少,主要思考方式在于把大事化小。递归的应用场景很多,在有子类的情况下都可以用递归。以后的二叉树,红黑树,也都会用到递归。递归的条件递归有两个必要条件。第一个必要条件:存在限制条件,当满足这个限制条件的时候,递归便不再继续。第二个必要条件:每次递归之后,都会越来越解决这个限制条件。...原创 2021-07-25 19:19:40 · 226 阅读 · 2 评论 -
C语言之函数详解
C语言函数!=数学函数在C语言当中,我们会经常用到函数,但是C语言当中的函数是一段代码块,也叫子程序。可以被其它函数调用,增加代码的复用性。C语言的函数分为库函数和自定义函数库函数库函数就是C语言当中本来就存在的函数,可以帮助我们实现某种功能,但是使用的时候要引用头文件。就比如 strcpy 就是字符串拷贝函数,有两个参数,第一个是要拷贝到的字符数组,第二个是字符数组的源头。#include<string.h>int main(){ char arr1[10] = "000000原创 2021-07-24 21:17:51 · 667 阅读 · 1 评论 -
秒懂C语言循环语句
C语言当中的循环语句有 for() whlie() do…while() 三种。while循环while 循环,while 循环的括号里面放的是表达式,表达式判断为真,就继续循环,如果表达式判断为假,就跳出循环。在屏幕上打印1-10的数字:int main(){ int i = 1; while(i<=10) { printf("%d ", i); i = i+1; } return 0;}这个while循环表达式的判断条件是 i<=10 当判断为假的原创 2021-07-22 19:54:48 · 794 阅读 · 5 评论 -
一文学会C语言分支语句
在C语言当中的分支语句(又叫选择结构)有 if 和 switch 两种。if 语句如果好好学习,校招时拿一个好offer,就能获得很好的成就。如果不好好学习,找不到好工作,就不会开心。这就是一个选择语句。if语句的语法://单分支if(表达式) 语句;//多分支if(表达式) 语句;else if(表达式2) 语句2;else 语句3;这样就是一个简单的 if 语句,如果好好学习,校招时就能拿一个好offer。如果不好好学习,就找不到好工作。用代码实现:int main(原创 2021-07-21 22:19:29 · 240 阅读 · 9 评论 -
傻瓜式讲解二分查找
二分查找用于有序数组的查找。比如说一个有序数组,是按照如下顺序排的:1 2 3 4 5 6 7 8 9 10在这个数组里面,假设要查找数字7。这里定义左边为 left 右边为 right 中间是 mid二分查找是按照数组的下标查找,先按照下标,来找出数组中间位置的下标,然后拿中间位置的数去和要找的数比较,如果中间这个数小,就说明要找的数在右半部分,如果中间这个数大,那就说明要找的数在左边。如果一样大的话,就说明找到了。如下图:这里就是第一次找到的中间的下标,是4在这里发现,5还是原创 2021-07-20 22:02:40 · 162 阅读 · 6 评论 -
初始C语言 —— 函数,数组,操作符
函数在C语言当中,函数就是一个代码块,可以在很多地方调用,增加代码的复用性。函数都写在main函数外面。int main(){ int num1 = 0; int num2 = 0; int sum = 0; printf("输入两个操作数:>"); scanf("%d %d", &a, &b); sum = num1 + num2; printf("sum = %d\n", sum); return 0;}这原创 2021-07-19 21:58:21 · 249 阅读 · 3 评论 -
初始C语言——字符串,转义字符,循环语句
字符串由双引号引起来的一串字符就叫字符串,字符串也是通过下标来访问的,但是字符串的结束标志是\0,用代码来看。int main(){ char arr1[] = "fiee"; char arr2[] = {'f', 'i', 'e', 'e'}; char arr3[] = {'f', 'i', 'e', 'e', '\0'}; printf("%s\n", arr1); printf("%s\n", arr2); printf("%s\n", arr原创 2021-07-18 23:13:16 · 327 阅读 · 3 评论 -
初始C语言——数据类型,变量,常量
第一个C语言程序我们刚开始接触C语言的时候,最先开始的是C语言的main函数。main函数就是C语言的开始,所以我们可以写出第一个C语言程序#include<stdio.h>int main(){ printf("hello tomorrow\n"); return 0;}上面这就是一个最最简单的C语言程序,由main函数开始,printf是一个库函数,是为了在屏幕上面输出hello tomorrow,这是一个库函数,所以要引用头文件#include<std原创 2021-07-17 23:03:59 · 251 阅读 · 2 评论 -
C语言实现三子棋
通过代码实现三子棋首先应该有一个菜单,所以在main函数里面调用一个菜单函数,函数名设置为menu(); ,menu实现为下面的代码void menu(){printf("******************\n");printf(" 1. play 0. exit\n");printf("***************************\n");}设置为1开始游戏,0退出游戏。所以在main函数中可以使用do while循环,因为当输入为0的时候,就退出循环,选择错误的话就继续原创 2021-04-09 22:41:22 · 97 阅读 · 0 评论 -
C语言实现猜数字游戏
C语言实现猜数字游戏可以先想一想思路,主要是通过判断来实现,比如输入一个数,与随机数相对比,如果大了就在屏幕上面输出猜大了,如果小了就输出猜小了,所以就可以通过这样实现,所以先弄一个菜单,通过调用函数去实现。创建一个菜单函数,所以就出现了菜单的选择,选择什么样进行游戏,选择什么样的退出游戏,所以就用 do while 循环,因为do while 没执行一次都会判断是不是继续循环,所以就有了基本框架,也要用到switch 语句,因为在选择菜单的时候应该这样,按照输入的内容进行执行 。void menu()原创 2021-03-28 11:21:33 · 605 阅读 · 0 评论 -
C语言 两道简单题练习
第一道 求两个较大值既然是求两个数较大值,就是两个数比较,大的就是较大值,所以通过代码实现int main(){int num1 = 10;int num2 = 20;if (num1 > num2)printf(“较大值:%d\n”, num1);elseprintf(“较大值:%d\n”, num2);return 0;}这里是通过if语句比较大小,定义两个数,if语句判断,就可以输出结果。不过还可以修改一下,改成输入两个数比较大小,所以就用到scanf,scanf是输入函原创 2021-03-13 19:58:01 · 157 阅读 · 0 评论 -
C语言 关键字
在写程序的时候,通常会用到关键字,例如unsigned int 一定要注意,关键字和定义的变量不能一样,因为如果一样的话,就会产生bug,struct是结构体关键字,register 将a定义为寄存器变量typedef-类型定义-类型重定义,例如typedef unsigned int u_int;unsigned int num = 20;这里是拿typedef把unsigned int重定义为u_intu_int num2 = 20;static-将局部变量变成静态局部变量,就是在调用函数原创 2021-03-12 23:12:58 · 137 阅读 · 0 评论 -
C语言实现关机程序
这次写一个关机程序,要知道关机程序是 shutdown 这是关机指令。但这是系统指令,所以要调用执行系统命令的函数,system,但是也要引system的头文件:stdlib.h 边写代码边解释#include<stdio.h>#include<stdlib.h>//调用system函数所需的头文件#include<string.h>//调用strcmp所需的头文件int main(){ char input[20]={ 0 };//这里是创建一个存储字符的数原创 2021-03-06 12:46:03 · 1162 阅读 · 0 评论 -
C语言—一道面试题(品茗股份)
题目:a=3 b=5 交换a b的值 不能创建临时变量先试试创建变量的方式,可以试试前面讲过的的赋值操作符”=“这里创建变量c,这样就类似于自己把东西做个交换,把两瓶水交换,用一个空瓶做中间量,交换的话,假设c是那个空瓶,先将a倒入c,再将b倒入a,然后再将c倒入b,这样就完成了交换。int main(){int a = 3;int b = 5;int c = 0;printf(“交换前:a=%d b=%d\n”, a, b);c = a;a = b;b = c;print原创 2021-02-27 21:39:44 · 331 阅读 · 0 评论 -
C语言操作符讲解
算术操作符% 这是取模操作符,取模得到的是余数,例子:int main(){int a = 5 % 2;printf("%d\n", a);return 0;}这里是5模2的余数,余1,所以打印的结果是1。移位操作符,移的是二进制位,<< 左移操作符,>>右移操作符。例如:int main(){int a=1;int b=a<<1;//左移操作符printf("%d\n",a);printf("%d\n",b);return 0;}这原创 2021-02-26 21:33:00 · 182 阅读 · 0 评论 -
C语言浅谈if语句,while循环,函数调用,数组
浅谈一下if语句,if语句就是表示判断,如果判断为真,那么就执行真的代码,如果为假,就执行假的代码。例如下面的例子。int main(){int input = 0;printf(“看着一些大厂offer\n”);printf(“你要好好学习吗?(1/0)>:”);scanf("%d", &input);if (input == 1)printf(“好offer”);elseprintf(“不好的offer”);return 0;}先定义了局部变量input=0,界面原创 2021-02-25 15:20:47 · 2302 阅读 · 1 评论 -
C语言第二篇
要注意局部变量和全局变量的区别 这两个变量尽量不要相同 容易产生bug 因为会优先局部变量在使用变量的时候 C语言规定变量要定义在代码块的最前面。如果要输入内容的话,用到输入函数:scanf 例如int main(){int num1 = 0;int num2 = 0;int sum = 0;scanf("%d%d", &num1, &num2);sum = num1 + num2;printf(“sum =%d\n”, sum);return 0;}scanf 是原创 2021-02-19 22:04:43 · 220 阅读 · 2 评论 -
C语言开始
刚开始注意事项写代码的时候一定要引头文件 #include<stdio,h> 就是standard input output – 标准输入 输出每次都要有主函数:int main(){return 0;}printf是将结果打印在屏幕上面 将代码内容变得可视化第一课参考代码#include <stdio.h>int main(){printf(“first day\n”);return 0;}这样是在屏幕上面打印出 first day \n是换行的意思,原创 2021-02-16 18:15:48 · 394 阅读 · 0 评论