![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言
文章平均质量分 70
记录自己学习C语言的知识点
嵌入式_Chen
共享、共赢、共进步,鉴证我们的成长!
展开
-
C语言 实战练习 | 贪吃蛇
#include <stdio.h>#include <stdlib.h>//#include <stdbool.h>#include <Windows.h>#include <time.h>#include <conio.h> /*键盘输入获取*/bool gameOver;bool stop = false;bool hit = false;/*游戏的边框大小*/const int width = 50;co原创 2021-03-18 18:31:55 · 202 阅读 · 1 评论 -
C语言 结构体 联合体 | 嵌套使用
结构体、联合体是C语言中的构造类型,结构体我们平时应该都用得很多。但是,对于联合体,一些初学的朋友可能用得并不多,甚至感到陌生。我们先简单看一下联合体:在C语言中定义联合体的关键字是union。定义一个联合类型的一般形式为:union 联合名{成员表};成员表中含有若干成员,成员的一般形式为:类型说明符 成员名。其占用的字节数与成员中最大数据类型占用的字节数。下面我们一起看一下结构体、联合体结合使用在C语言、嵌入式中的一些实用技巧。1、应用于管理不同的数据示例代码:enum DATA_转载 2021-03-22 21:38:24 · 12503 阅读 · 4 评论 -
C语言 结构体 | 由浅到深介绍
一、结构体的概述C语言中有两种类型:原生类型和自定义类型。结构体类型是一种自定义类型1、结构体使用定义结构体是需要先声明结构体的类型,然后再用结构体类型来定义结构体变量,不过也可以在定义的同时定义结构体变量。如:# include<stdio.h>//定义类型struct people{ char name[20]; int age;};//定义类型的同时定义变量struct student { char name[20]; int age;}s1;//将类型s原创 2021-03-22 00:07:16 · 355 阅读 · 7 评论 -
C语言 关键字 | typedef
1、typedef关键字的用法typedef是C语言中的一个关健字,用于定义新的类型(或者类型的重命名)C语言中的类型一共有两种:一种是编译器定义的原生类型(基础数据类型,如 int、double之类的);第二种是用户自定义类型,不是语言自带的,而是程序员自己定义的(如数组类型、结构体类型、函数类型等)。我们今天讲的数组指针、指针数组、函数指针等都属于用户自定义类型。有时候自定义类型太长了,用起来不方便,所以用typedef给它重命名一个简短的名字。只是类型的命名工。 所以typedef本身并不原创 2021-03-21 16:09:46 · 1182 阅读 · 0 评论 -
C语言 | strncpy() strcpy()的实现
1、strcpy()char * rt_strcpy(char *dst ,const char *src){ if(src != NULL) { char *d = dst; const char *s = src; while(*s++ != 0) { *d++ = *s; } } return (dst);}2、strncpy()char * rt_strncpy(char *dst ,const char *src ,int n){ i原创 2021-03-18 16:20:57 · 243 阅读 · 0 评论 -
C语言 | 深入学习数组
说明:本文章之讨论一维数组,适宜程度:对C语言初步认识及想深入学习者1、从编译器角度理解数组从编译器角度理解来讲,数组也是一个变量,和普通的变量没有本质的区别。变量的本质指的是一段内存空间,编译器在编译的时候,会将一个变量名和这段内存空间的第一个字节地址绑定,变量的类型决定了这段内存空间的字节数。当我们希望访问的这段内存空间的时候,一个方法就是利用变量名访问,但是变量名会受到作用域的限制,还有另外一种发法就是直接使用地址访问,并且不会受到作用域的限制。数组的定义一样遵循这样的原理。2、从内存角度理解数原创 2021-03-15 22:23:25 · 843 阅读 · 0 评论 -
C语言 函数指针 | 作为函数参数 作为结构体成员
函数指针有两种常用的用法,一种是作为结构体成员,另一种是函数指针作为函数的参数。1、函数指针作为函数的参数函数指针可以作为一个参数传递给另一个函数。这时函数指针的使用就像普通的常量和变量一样。当函数指针作为参数传递的时候,这时接收参数传递的函数通常需要根据这个指针调用这个函数。作为参数传递的函数指针通常表示回调函数(Callback Functions)。回调函数已在之前一篇文章中有所介绍,下面我再举其他例子进行介绍。什么是回调函数函数指针可以作为一个参数传递给另一个函数。这时函数指针的使用就像普原创 2021-03-07 15:16:26 · 1428 阅读 · 0 评论 -
C语言 函数指针 | 回调函数
1、什么是回调函数说明:回调函数其实不难!!!!首先要明确的一点是,函数也可以作为函数的参数来传递。所以可以理解为:把一段可执行的代码像参数传递那样传给其他代码,而这段代码会在某个时刻被调用执行,这就叫做回调。如果代码立即被执行就称为同步回调,如果过后再执行,则称之为异步回调。回调函数:就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由原创 2021-03-04 18:38:21 · 1910 阅读 · 8 评论 -
C语言 宏 | assert()
一、什么是assert()?编写代码时,我们总是会做出一些假设,断言(assert)就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。注意:assert()是一个宏,而不是函数。二、assert怎么用?1、assert所在的头文件及原型在MinGW工具中,assert转载 2021-03-03 14:35:59 · 2171 阅读 · 2 评论 -
C语言运算符优先级存在的问题
一、C语言运算符优先级存在的问题1 siseof#include<stdio.h>int main(void){ int n = 3; double *b = (double*) &n; printf("%d \n", n * sizeof * b);//这是一个乘号还是两个乘号? return 0;}其实这句话是这样的printf("%d \n", n *( sizeof (* b)));当sizeof 的操作符是个类型名时,两边必须加上括号(这也就使人常常原创 2020-10-02 19:40:02 · 273 阅读 · 1 评论 -
C语言的符号重载
一、主要重载操作符1、static在函数内部,表示该变量的值在各个调用间一直保持延续性。在函数这一级,表示该函数只对本文件可见。2、extern用于函数定义,表示全局可见(属于冗余)。用于变量,表示它在其他地方定义。3、void作为函数的返回类型,表示不返回任何值。在指针声明中,表示通用的类型。位于参数列表中,表示没有参数。4、*乘法运算符。用于指针,表示间接引用。在声明中表示指针。5、&位的AND操作符。取地址运算符。6、=赋值符7、==比较运算符。8、原创 2020-10-02 19:37:57 · 344 阅读 · 0 评论 -
NUL 与 NULL
1、NUL 与 NULL在C语言中,字符串表示为字符的数组。字符串最后一个字符为空字符 (’\0’),官方将其定义为 NUL ,而 NULL 是一个宏,其定义如下:#define NULL ((void*)0) //C语言的标准#define NULL 0 //C++标准...原创 2020-10-02 18:38:45 · 390 阅读 · 1 评论 -
C语言 标识符 | static
在学习VC++深入详解第四章简单绘图时遇到了静态函数,因此便开始了对于STATIC标示符的挖掘学习,1、什么是static? static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static? 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个转载 2020-09-14 21:07:23 · 513 阅读 · 1 评论 -
struct和class的联系及区别
1.C++中struct和class本质区别struct 最早是在C语言(面向过程编程语言)中出现的,在C++中对struct的功能进行了扩展。class在C++(面向对象编程语言)中是非常重要的。C++(C with class)补充:C语言里是没有class关键字:因为可以测试在(XXX.C)文件中定义一个int class;编译器不会报错。1):默认的继承权限不一样struct默认是公有继承(public)class默认是私有继承(private)2):默认访问权限不原创 2020-09-06 14:44:13 · 509 阅读 · 0 评论 -
C/C++ | 编译和连接
C/C++的编译和连接首先我们需要大致的了解extern "C"的作用:可参考我的文章:是实现的类C和C++的混合编程。下面我们就分别介绍如何在C++中调用C的代码、C中调用C++的代码。首先要明白C和C++互相调用,你得知道它们之间的编译和连接差异,及如何利用extern "C"来实现相互调用。...转载 2020-09-06 00:41:38 · 301 阅读 · 0 评论 -
C语言 关键字 | extern
C语言extern关键字1.使用场景有两种情况一种是对变量而言,另一种是对函数而言1): 对变量而言变量的声明有两种情况:一 是需要建立存储空间的,不用加extern;另外一种是不需要建立存储空间的,需要加extern。如果想在本源文件中使用另外一个源文件的变量,就需要在使用前用 extern声明该变量,或者在头文件中用extern声明该变量2):对函数而言对函数而言,如果想在本源文件中使用另一个源文件的函数,就需要在使用前对函数进行声明,声明函数加不加extern都没关系,所以在文件原创 2020-09-05 22:40:59 · 335 阅读 · 0 评论 -
C语言 关键字 | volatile
C语言volatile关键字1.简介volatile是一个类型修饰符(type specifier),它是被设计用来修饰被不同线程访问和修改的变量。2.作用volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值。 简单地说就是防止编译器对代码进行优化。举例说明:|1| BYTE[2] = 0x12 ||2| BYTE[2] = 0x34 |原创 2020-09-05 14:55:21 · 251 阅读 · 0 评论 -
_getch()函数的介绍
_getch()函数的介绍及实例演示我们一般所使用的 getchar() 函数在读入一个字符时必须按一下 Enter 键,该代码才会继续运行;但是 _getch() 函数读入一个字符时 不用 enter 代码会继续跑;最简单使用场景是登陆界面输入密码时,我们不想让密码显示,而是每一次输入都显示一个‘*’,使用_getch()函数需使用到头文件:#include<conio.h>使用示例:#include<stdio.h>#include<conio.h&g原创 2020-09-04 18:46:09 · 16634 阅读 · 1 评论 -
c/c++语言实现登陆界面
C/C++语言简单实现登陆界面整体功能介绍/***********************************************************实现一个登陆界面1 输出一个登陆界面2 用户名能够实现邮箱验证,regex库,密码要不可见3 进度条的模拟实现4 音乐播放***************************************************************/分步实现1.输出一个登陆界面首先对此功能使用到的函数进行简单的介绍。(1).原创 2020-08-28 22:17:43 · 11967 阅读 · 0 评论