C语言
迷亭君
寄蜉蝣于天地,渺沧海之一粟。
展开
-
C语言——预处理和宏定义
预处理和宏定义原创 2020-12-09 20:52:02 · 1349 阅读 · 0 评论 -
C语言动态内存分配——malloc,calloc,realloc,free
动态内存分配目录动态内存分配一、编译时分配内存二、动态内存函数1、void* malloc(size_t size); 2、void free (void* ptr);3、void* calloc(size_t num,size_t size);4、void* realloc(void* ptr, size_t size);三、注意事项1、动态内存开辟一定记得释放!2、如何检测某个函数是否内存泄漏?3、虽然释放内存了,但是释放...原创 2020-12-05 22:50:51 · 549 阅读 · 1 评论 -
C语言自定义类型——联合(共用体)
联合(共用体)前面分别介绍了结构体,位段和枚举类型,今天我们来介绍最后一个自定义类型——联合(又叫共用体)。目录联合(共用体)一、定义二、联合的大小计算三、根据联合判断大小端。一、定义联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。根据上述定义我们可知,联合中的所有成员都是从相同的内存地址开始。下面就是一个例子union Un{ char c; int i;};它的内存示意图应原创 2020-12-05 20:18:31 · 794 阅读 · 0 评论 -
C语言自定义类型——枚举
枚举前面我们分别介绍了两种自定义类型,分别是结构体和位段,今天我们来介绍另一种自定义类型枚举。当然这一节的内容比较简单。一、定义枚举在C/C++/c#中,是一个被命名的整型常数的集合, 枚举在日常生活中很常见。例如表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,SATURDAY,就是一个枚举。简单的讲,枚举就是把一个事物的可能一一列举,例如:月份有一到十二个月可一一列举;星期也可以列举等等。我们看一下原创 2020-12-04 19:55:35 · 5164 阅读 · 0 评论 -
C语言自定义类型——位段
位段C语言中有很多的自定义类型,我在以前的博客中已经讲过了结构体和结构体的内存对齐,现在我们来讲另一个自定义类型,就是位段。一、定义位段,C语言允许在一个结构体中以比特位为单位来指定其成员所占内存长度,这种以位为单位的成员称为“位段”或称“位域”( bit field) 。利用位段能够用较少的位数存储数据。可以看出位段和结构体很像,下面我们引入一段代码片段来看一下位段到底长什么样子。struct A{ int a : 2;//成员a占2个比特位 int b : 5;//成.原创 2020-12-03 23:10:45 · 2391 阅读 · 1 评论 -
C语言——结构体内存对齐
结构体内存对齐大家有没有想过这样的问题,结构体的成员变量在内存中如何存放?是否就是按照顺序依次排列吗?让我们简单看一下下面的代码:#include <stdio.h>struct A{ char c1; int i; char c2;};int main(){ printf("%d\n ", sizeof(struct A)); return 0;}根据直觉,感觉结果应该是1+4+1=6但是结果如下:为什么会出现这种情况呢?这就要提到今天的原创 2020-11-25 22:11:28 · 530 阅读 · 0 评论 -
C语言基础——自我实现string.h库函数相关内容
自我实现string.h库函数相关内容一、求字符串长度:strlen();库函数中为size_t strlen ( const char * str );参数 str 为一个指向一个字符串的 const char*型的指针,返回值为该字符串的长度('\0'不算在其中)(size_t为无符号整型)。下面自行实现该函数:size_t myStrlen(const char* str){ if (str == NULL){ return 0; } size_t len = 0;原创 2020-11-24 10:57:25 · 326 阅读 · 0 评论 -
C语言——数据在内存中的存储
数据在内存中的存储想要学好编程语言学好语法只是基础,熟悉内存才能对C语言有更加深刻的认识。一、简单认识内存首先需要说明,内存是一种物理硬件,计算机中所有程序的运行都在内存中进行。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算。当运算完成,CPU将结果传送出来。与内存相对应的就是外存,内存外存各有特点,下面我来简单罗列一下两者的特点:内存:容量小,速度快,价格高,掉电后信息不能保存;外存:容量大,速度慢,价格低,掉电后信息可以保存;就是由于这些特点,计算原创 2020-11-18 20:08:34 · 1058 阅读 · 0 评论 -
C语言——指针练习——sizeof()和strlen()
指针练习一、int arr[] = { 1, 2, 3, 4 } 类型每一行运行的结果在注释中有标注 int arr[] = { 1, 2, 3, 4 }; printf("%d\n", sizeof(arr)); // 16 printf("%d\n", sizeof(arr + 0)); // 4 求 sizeof(int*) printf("%d\n", sizeof(*arr)); // 4, 求 sizeof(int) printf("%d\n", sizeof(arr +原创 2020-11-14 15:57:18 · 437 阅读 · 0 评论 -
C语言——函数指针
函数指针C语言中的指针类型有很多种,但是函数指针可能有些小伙伴没听过,下面我们引入一段定义。函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。一、C语言中的函数指针咋来的?1、函数是C语言中的一段代码;2、编译器把这个C代码转成二进制指令,放到可执行文件中;3、操作系统执行这个程序的时候(比如双击exe文件),就还把这个二进制的文件指令加载到内存中;4、在内存中,就原创 2020-11-13 20:31:24 · 7382 阅读 · 0 评论 -
C语言基础——二维数组应用(二)扫雷
扫雷上次用数组完成了一个井字棋,接下来用数组完成一个简易版扫雷。《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在短的时间内根据格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。根据上述定义,我们可知,游戏胜利的要求是:找出所有非雷的格子。现在我们简单梳理一下完成游戏的思路一、变量定义1、首次要定义地图变量,这里注意要定义两个二维数组,一个用来存放地雷的分布情况,另一个存放玩家看见的地图。 这里以9*9的地图为例 char...原创 2020-11-12 11:15:44 · 1470 阅读 · 4 评论 -
C语言基础——二维数组应用(一)井字棋
井字棋数组是C语言中一种重要的数据类型,接下来我和大家分享用二维数组完成一个井字棋游戏。井字棋,是一种在3*3格子上进行的连珠游戏,和五子棋类似。游戏需要的工具仅为纸和笔,然后由分别代表O和X的两个游戏者轮流在格子里留下标记(一般来说先手者为X),任意三个标记形成一条直线,则为获胜。井字棋的规则想必大家都已非常清楚,下面来简单梳理一下完成这个游戏的主要思路一、变量的定义1、首先要定义棋盘变量为一个3*3的二维数组 char board[3][3]。2、用一个int型的...原创 2020-11-09 13:03:45 · 1859 阅读 · 0 评论 -
C语言基础——当函数的传入参数是数组时,数组长度的计算
当函数的传入参数是数组时我们看下面一段代码void test1(int arr[]){ int len = sizeof(arr) / sizeof(arr[0]); printf("test1.len=%d\n", len);}int main(){ int arr[5] = { 1, 2, 3, 4, 5 }; int len = sizeof(arr) / sizeof(arr[0]); printf("main.len=%d\n", len); test1(arr);原创 2020-10-27 16:36:55 · 4510 阅读 · 2 评论 -
C语言基础——二分查找
二分查找何为二分查找二分查找也称折半查找,它是一种效率较高的查找算法,如果查找的元素包含在列表中,二分查找返回其位置。基本思想假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。代码实现下面是C语言代码#include &原创 2020-10-22 10:29:37 · 267 阅读 · 0 评论 -
C语言基础——移位操作符
移位操作符计算机底层的数据运算大多以二进制进行,所以作为一个程序员必须要了解移位运算,C语言中左移和右移运算分别用 << 和 >> 表示。需要注意的是C语言中的位移操作是算数位移,即右移时,左边用原该值的符号位填充,右边丢弃。具体情况如下#include <stdio.h>int main(){ char a = 10; a = a << 1; printf("a = %d\n", a); char c = -252; /*原创 2020-10-10 11:06:02 · 793 阅读 · 0 评论 -
C语言基础——转义字符
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加""来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。转义有两层含义,一层是把普通字符转化为特殊字符,例如’\t’;另一种是将特殊字符转化为普通字符,例如’\’。转义字符可以分为三类,第一类是普通转义字符,第二类是八进制转义字符,第三类是十六进制转义字符。普通转义字符转义字符释义\?书写连续多个问号时,防止被原创 2020-09-30 17:58:47 · 9547 阅读 · 0 评论