C语言
文章平均质量分 60
通过自己学习C语言的经验总结出来的
wuqiongjin
那时候,未来遥远而没有形状,梦想还不知道该叫什么名字
展开
-
结构体,位段,枚举和联合的使用详解
结构体 谈到结构体,我们会关注结构体的声明,结构体的自引用和结构体的大小等问题。接下来我们主要来分析一下结构体的大小是如何计算的,而结构体的大小又是与结构体中的内存对齐息息相关,我们通过对结构体中的内存对齐进行分析来得到结构体的大小。 结构体中的内存对齐 结构体中的内存对齐原则: 第1个成员在与结构体变量偏移量为0的地址处。 从第2个成员开始,就要对齐到“对齐数”的整数倍的地址处了 对于嵌套了结构体的结构体,嵌套的结构体要对齐到 自己的最大对齐数 的整数倍处 结构体的总大小是 最大对齐数 的原创 2021-03-08 11:05:47 · 1108 阅读 · 1 评论 -
求一组数中只出现1次的2个数
在求解这道题之前,我们先来看一道比这道题简单点的题。 求一组数中只出现1次的那1个数,其他数字都出现了2次 方法1: 利用双层循环(都从0开始,保证count计数不出现问题),用计数器count,如果2个数相同,count++,若count == 1,则break 方法2: 利用异或运算符 (相同为0,相异为1) 异或运算是作用于补码上的运算符。 异或运算的几个特点: 0 ^ a = a a ^ a = 0 a ^ b ^ a = b a ^ b = b ^ a a ^ b ^ c原创 2021-02-27 16:04:37 · 227 阅读 · 3 评论 -
整形与浮点型在内存中的存储
有符号整形的三种表示方法:原码,反码,补码 原码: 原码就是将有符号数直接转换为二进制的形式(含符号位) 反码: 反码就是将原码的符号位不变,其他位进行按位取反即可 补码: 补码就是反码+1得到的 然后在计算机内存中存放的是补码,因为使用补码可以将符号位和数值域进行统一的处理。 对于无符号数而言,无符号数的原码=反码=补码。 整形的范围 有符号的char的范围是 -128 ~ 127 无符号的char的范围是 0 ~ 255 有符号的int的范围是 (-2^31) ~(2^3.原创 2021-02-05 00:13:29 · 349 阅读 · 1 评论 -
常用字符串函数的模拟实现
目录 strlen的模拟实现 strcpy的模拟实现 strcat的模拟实现 strcmp的模拟实现 strstr的模拟实现 memcpy的模拟实现 memmove的模拟实现 strlen的模拟实现 size_t strlen (const char* str); strlen该函数是统计字符串的长度的 方法1:计数器count 利用临时变量count来统计字符的个数。 int my_strlen(const char* str) { int count = 0; ass原创 2021-01-29 01:09:41 · 261 阅读 · 0 评论 -
轻松掌握操作符,常用操作符的应用分析
这篇博客主要是对C语言中的一些操作符进行讲解和其应用的分析。 目录 移位操作符 应用分析 位操作符 应用分析 逻辑操作符 应用分析 逗号表达式 应用分析 条件操作符 应用分析 关于表达式求值的顺序 移位操作符 移位操作符有2种: 左移操作符 << 右移操作符 >> 提示:移位操作符,移的是二进制位,即对补码进行移动操作。 应用分析 左移操作符的移动规则: 左边抛弃,右边补0 右移操作符的移动规则: 右移运算有2种,①逻辑移位 ②算原创 2021-01-27 22:21:10 · 269 阅读 · 0 评论 -
简单扫雷的实现
总体思路: 利用二维数组,设置2个扫雷的棋盘,一个用来存放扫雷的信息(Mineboard),另一个用来给玩家展示已经扫过的位置(Showboard)。然后开始埋雷,通过生成随机数来向存放雷的信息的二维数组里面添加雷。然后开始扫雷,玩家每输入一对坐标,对该对坐标进行判断,如果没踩雷,则进行统计该位置周围的8个位置的雷的数量,然后显示在用来展示的数组中。如果扫雷的次数=总格数-雷数,那么扫雷成功。 具体代码: #include <stdio.h> #include <time.h>原创 2021-01-25 23:46:57 · 310 阅读 · 1 评论 -
简单三子棋的实现
总体思路:借助二维数组模拟棋盘,首先创建一个棋盘,然后对棋盘进行初始化,初始化内容为空格。然后玩家进行下棋的操作,随后判断一次输赢,然后电脑进行下棋操作,随后判断输赢。 #include <stdio.h> #include <time.h> #include <stdlib.h> #define ROW 3 #define COL 3 void menu()//显示菜单 { printf("*********************\n"); printf(原创 2021-01-25 20:17:07 · 227 阅读 · 0 评论 -
快速帮你理清“指针数组“,“数组指针“,“函数指针“和“函数指针数组“!!!
也许很多人和我一样,看到这些和指针相关的概念就头疼,但是今天只要耐心看完我接下来的解释与分析就能够做到清楚地判别不同类型的指针和数组。 首先,在接触这些词前,要记住一件事,这些名词都是有规律的,比如:指针数组,这是一个数组,前面的指针是修饰数组的。同理,数组指针就是一个指针,前面的数组是修饰指针的。 指针数组 定义:指针数组就是一个存放指针的数组,即数组中的每个元素的类型都是指针类型。 通常结构:类型* 数组名[数组的长度] 此处的类型是指:数组中的指针是什么类型的指针,这取决于指针所指向的对象原创 2021-01-19 14:24:01 · 228 阅读 · 0 评论 -
二分查找法/折半查找法
注意:此方法只适用于有序数组的查找,如果数组无序,先进行排序再进行后续的查找。二分查找/折半查找的思路:由数组的最左边下标0和最右边下标(数组大小-1)确定数组的中间下标mid,通过arr[mid]和要查找的元素进行比较,来判断要查找的元素的具体位置。如果要查找的元素比中间值arr[mid]小,那么查找的区间就缩小到arr[0]到arr[mid-1],如果要查找的元素比中间值arr[mid]大,那么查找的区间就缩小到arr[mid+1]到arr[sz-1],然后不断进行这样的操作,直到找到该元素或者循环条件原创 2021-01-19 11:56:30 · 402 阅读 · 0 评论