C语言
文章平均质量分 54
一些简单的C语言知识整理
绿丰不绿
Consider deeply but remain Fearless.
展开
-
【C语言】预处理指令#define的使用,宏与函数的对比
编译本身也分为几个阶段:预编译->编译->汇编->链接预处理指令是在预编译阶段执行的,#define就是在预处理阶段执行的语句原创 2022-04-15 11:09:10 · 2113 阅读 · 0 评论 -
【C语言】如何进行文件操作
目录为什么要使用文件文件文件的打开和关闭文件指针文件的打开和关闭为什么要使用文件例如:写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,但是当程序退出的时候,程序数据就被销毁,通讯录中的数据自然就不存在了,等下次运行通讯录程序的时候,数据又得重新录入。而使用文件,可将已有的通讯录数据写入文件中,就是将已有的数据直接存放在电脑的硬盘上,需要用到通讯录时就可以从文件中读取,做到了数据的持久化。文件磁盘上的文件就是文件,原创 2022-04-12 11:39:26 · 153 阅读 · 0 评论 -
【C语言】获得可变大小的内存空间——动态内存分配malloc/calloc/realloc/free函数
为什么存在动态内存分配静态内存开辟:int a = 20;char arr[10] = {0}特点:1. 空间开辟大小是固定的。2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。malloc/freemalloc函数:向内存申请一块连续可用的空间,并返回指向这块空间的指针void* malloc(size_t siz原创 2022-04-02 22:41:43 · 481 阅读 · 0 评论 -
【C语言】实现一个通讯录(动态扩容)
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址功能:添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 清空所有联系人 以名字排序所有联系人固定大小通讯录 <-这是静态大小的通讯录这个动态大小的通讯录可以先开辟较小的空间,后根据需求再开辟所需要的空间,更节约内存空间写这个通讯录需要对结构体成员访问、动态内存分配的知识有一定的了解定义通讯录结构体#define NAME_MA..原创 2022-04-02 16:26:53 · 960 阅读 · 0 评论 -
【C语言】实现简易通讯录(静态大小)
通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址功能:添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 清空所有联系人 以名字排序所有联系人这个程序主要就是结构体的一些应用,要对结构体成员访问的知识有了解结构体定义先定义一些常量,来定义字符数组的长度#define NAME_MAX 20#define SEX_MAX 5#define TELE_MAX 12#define ADD.原创 2022-03-30 10:40:09 · 626 阅读 · 0 评论 -
【C语言】逻辑或语句中的表达式计算
逻辑或表达式中,如果前面的语句表达式为真,则后面的语句将不会计算for(int i = 0 ; i || i++ < 5;);比如这个for循环中第一次循环时i=0,表达式为假,所以i++会执行,执行后i=1 第二次循环时i=1,表达式为真,所以后面的i++不会执行,所以i将永远等于1,无限循环...原创 2022-02-20 17:01:48 · 1124 阅读 · 0 评论 -
【C语言】求多数元素的摩尔投票法
给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于[n/2]的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。--leetcode169 摩尔投票法:假设一个元素过半数,设count=1,遍历后面的元素,如果相同则count+1,不同则count-1;若count==0则换一个元素成立前提:数组中有一个元素多于半数int majorityElement(int* nums, int numsSize){ int cou...原创 2022-02-23 16:09:27 · 555 阅读 · 0 评论 -
【C语言】模拟实现字符串库函数strlen\strcmp\strcat\strcpy\strstr
strlenint my_strlen(const char* arr){ int count = 0; assert(arr != NULL); while (*arr++) { count++; } return count;}int main(){ char arr[20] = "abcdefg"; printf("%d\n", my_strlen(arr)); return 0;}strcpychar* my_strcpy(char* destinatio原创 2022-03-21 09:42:33 · 726 阅读 · 0 评论 -
【C语言】内存函数memcpy/memmove的模拟实现
memcpy与strcpy的功能类似,就是将源地址数据拷贝到目的地址上去,但是strcpy是字符串的函数,使用上仅局限于字符串,而memcpy可用于任何形式,适用范围更广。memcpy其实实质就是将内存数据逐字节拷贝,形参count就是需要复制的字节数,所以以count作为循环判断即可实现void* my_memcpy(void* dest, const void* src, size_t count){ assert(dest && src); //断言不为空指针原创 2022-03-25 10:37:29 · 929 阅读 · 0 评论 -
【C语言】猜数字游戏
要点:1.生成随机数2.猜不中继续猜的循环体代码如下:#include<stdio.h>#include<stdlib.h>#include<time.h>void face() //初始界面{ printf("**********************\n"); printf("******* 1.play *******\n"); printf("******* 0.exit *******\n"); printf("**原创 2022-01-18 23:35:50 · 2141 阅读 · 0 评论 -
【C语言】static修饰局部变量
int function(int n){ int i = 1; if (n >= 5) return n; n += i; i++; return function(n);}int main(){ printf("%d\n",function(1)); return 0;}在这里的function函数中,整形变量i是没有被修饰的,因此在函数function递归的时候,函数中的i被重新定义赋值为1(即会原来的 i 被销毁,创造新的 i ),所以最终function的返回.原创 2022-02-16 16:09:02 · 1506 阅读 · 2 评论 -
【C语言】 求水仙花数
“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=1^3+5^3+3^3,则153是一个“水仙花数”。思路:求出这个数是几位数,如153是个三位数 得到组成这个数的每一个数字,如153中的1、5、3 将单个数字的n次方储存在数组中 将数组所有元素相加 判断和与此数书否相等,相等则为水仙花数#include<stdio.h>int narcissus(int n) //判断是否为水仙花数{ int num = 1; .原创 2022-02-12 23:13:06 · 2584 阅读 · 0 评论 -
【C语言】 指针类型的强制转换与数据存放
先来看这段代码#include <stdio.h>int main(){ int a = 0x11223344; //十六进制数 char *pc = (char*)&a; *pc = 0; printf("%x\n", a); return 0;}这里定义的a是一个整形的变量,而指针pc定义的是字符型指针,char*类型的指针变量pc指向只能指向字符类型的空间,如果是指向非char类型的空间,如这里的指向int类型空间,就必须要将该原创 2022-02-09 12:48:08 · 966 阅读 · 0 评论 -
【C语言】简单三子棋游戏/井字棋游戏
基本实现思路:写出棋盘界面 通过数组来编辑棋子 玩家下棋/电脑下棋(随机) 输赢/平局的判断在程序中,新建出两个源文件:“test.c” 和 “game.c” ,以及一个自定义头文件 “game.h”,将游戏主体函数写在game.c文件里,并将函数声明在game.h文件里,这样就可以在test.c函数中实现game.c中游戏函数的调用,实现分块主要函数如下初始界面这是一个进入程序时的提供选项的简易菜单void menu(){ printf("*******...原创 2022-01-24 11:55:55 · 2552 阅读 · 0 评论 -
【C语言】整形数据在内存中的储存
主要内容:C语言的数据类型 原码、反码、补码 整形家族 整形数据在内存中的储存 C语言的数据类型 char 字符数据类型 short 短整形 int 整形 long 长整型 long long 更长的整形 float 单精度浮点型 double 双精度浮点型 类型的意义大小决定了使用范围,决定了使用这个类型开辟内存空间的大小 决定了如何看待内存空间的视角 原.原创 2022-03-01 21:14:06 · 741 阅读 · 0 评论 -
【C语言】数组越界导致死循环
先来看下面一段代码,数组定义为10个元素,但是访问的是12位,产生了越界#include<stdio.h>int main(){ int i = 0; int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //创建大小为10的数组 for (i = 0; i <= 12; i++) //访问大小为12 { arr[i] = 0; //改变数组值 printf("原创 2022-02-22 23:28:24 · 1089 阅读 · 0 评论 -
【C语言】struct结构体的内存对齐(结构体大小)
结构体:struct tag{member-list; //结构体成员}variable-list; //结构体变量再来看看这段代码:struct s1{ char a; int b; char c;};struct s2{ int a2; char b2; char c2;};int main(){ printf("%d\n", sizeof(struct s1)); printf("%d\n", sizeof(struct s2));原创 2022-03-27 20:40:37 · 959 阅读 · 0 评论 -
【C语言】具有qsort功能的冒泡排序法(通用排序)
我们常用的冒泡排序法:这个冒泡排序只适用于对一个整数数组的排序,比较字符串的大小、比较结构体成员的大小等都是没办法完成的,而库函数中的qsort函数可以对各种类型的数据进行比较个排序void bubble_sort(int arr[], int sz) //sz为数组大小{ for (int i = 0; i < sz - 1; i++) //排序的次数 { for (int j = 0; j < sz - 1 - i ; j++) { if (arr[j]原创 2022-03-13 23:20:20 · 1000 阅读 · 0 评论 -
【C语言】 递归法的一些简单应用
求字符串长度int my_strlen(char* arr){ if (*arr != '\0') return 1 + my_strlen(arr + 1); else return 0;}int main(){ char arr[20]; scanf("%s", arr); printf("字符串长度为%d\n", my_strlen(arr)); return 0;}运行如下:。求输入的每位数字之和int DigitSum(int n).原创 2022-01-22 12:37:22 · 357 阅读 · 0 评论 -
【C语言】实现简单扫雷游戏
基本思路:创建一个布置雷的数组,和一个展示雷附近雷数的数组 随机数方式布置雷 输入数组坐标来进行扫雷,是雷则游戏结束,不是则在这个坐标显示附近雷的个数 循环直至游戏结 关键:扫雷为9*9的方阵,但是要将实际雷的数组定义为11*11的二维数组,以便对一个坐标附近雷数进行计算 布雷、扫雷和打印都只是对11*11中间的那9*9数组进行操作首先是先创建game.c,test.c两个源文件和自定义头文件game.h,游戏函数写在game.c里,在test.c中实现.原创 2022-01-26 23:52:54 · 2522 阅读 · 0 评论 -
【C语言】求100~200中的素数(判断素数)
判断/求素数的简单函数原创 2022-01-16 17:01:00 · 296 阅读 · 0 评论