C语言
文章平均质量分 58
基础为主
code-016
有问题请私信,停更一段时间。
展开
-
【C语言】基础总结篇(究极避坑)
1.typedef:类型重命名一切合法的变量名的定义(普通变量、指针变量、数组变量、函数指针、结构体)都可以用typedef转换成类型名加typedef之前unsigned int UINT; //普通变量int* PINT; //指针变量int Array[10]; //数组变量void (*pfun)(); //函数指针struct Student stu; //定义结构体变量stustruct Student *pstu;//定义结构体指针pstu加上typedef之后t原创 2021-10-24 19:27:47 · 38902 阅读 · 18 评论 -
【C语言】共用体详解
原创 2021-12-06 16:24:37 · 1312 阅读 · 1 评论 -
【C语言】结构体位域
文章目录(一) 位域(二)举例说明(三)主要用途(四)看清区别,理解本质(五)匿名位域(六)只要是结构体,就要遵循内存对齐(一) 位域有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。注:其中位域的值不能超过该数据类型的最大二进制位个数,例char 一字节(8位),意味着位域的值<=8(二)举例说明#include <stdi原创 2021-12-05 22:02:00 · 3959 阅读 · 3 评论 -
【C语言】递归练习
递归参考文章:https://www.cnblogs.com/kubidemanong/p/10538799.html//递归:二分查找int BinaryFind(int* arr, int left, int right, int value){ int pos = -1; if(arr == NULL || left < 0 || right < left ) { return pos; } else {原创 2021-12-05 17:18:30 · 356 阅读 · 0 评论 -
【C语言】位运算
文章目录前言:(一)按位与&的主要用途(1)迅速清零(2)保定指定位(3)判断奇偶性(二)按位或 |(1)设定数据的指定位前言:C语言的位运算有6种:按位与&、按位或|、按位取反~、按位异或^、按位左移<、按位右移>注意:能够参与位运算的操作数必须是整型,以补码形式进行按位运算(一)按位与&的主要用途(1)迅速清零#include <stdio.h>int main(){ int a = 15; a = a & 0; pr原创 2021-12-04 19:24:15 · 3343 阅读 · 1 评论 -
【C语言】浮点数的存储形式
文章目录原创 2021-12-03 22:04:22 · 1091 阅读 · 0 评论 -
【C语言】数据类型的扩充和截断
(一)数据类型扩充(1)表示范围小的整型变量赋值给表示范围大的整型变量前提:不改变值的正负不改变值的大小规则:无符号整数,直接补0。有符号整数,扩充符号位。与左值的有无符号无关(例:short x = a; 与x是否有符号无关)(二)数据的截取(切片)(1)将数据类型较大的变量赋给数据类型较小的变量规则:无论有无符号,丢弃高位数据(三)算术类型转换和赋值类型转换自动类型转换:隐式类型转换强制类型转换:显示类型转换类型相容:类型不同,但系统原创 2021-12-03 17:40:15 · 1927 阅读 · 2 评论 -
【C语言】数据类型、原码、反码、补码详解
文章目录(一)常见的数据类型(二)数据的存放形式`(1)原码、反码、补码及其关系``(2)数据以补码的形式存放``(3)数据的溢出及数据截断`(三)计算机为什么要采用补码的形式来进行运算呢??(一)常见的数据类型整型数据类型所占字节大小 (32位系统)char1short2int4long4long long8注意:short 和 long 都可以和int 结合;short int或者int short都是short类型;long i原创 2021-12-02 22:42:15 · 1609 阅读 · 0 评论 -
【C语言】深入理解函数指针和函数指针数组
文章目录(一)什么是函数指针(1)函数指针的定义(2)函数指针的使用(二)回调函数(1) 回调函数定义(2) 回调函数的作用(3)回调函数的使用(三)什么是函数指针数组(1)函数指针数组的定义(2)函数指针数组的使用(四)函数指针实现泛型编程(1)实现一个输出函数,输出不同类型数组中所有元素(一)什么是函数指针(1)函数指针的定义简单来说,是一种指向函数地址的指针。定义函数指针语法:返回值类型 (*指针名)(形参类型列表);使用函数指针语法:函数指针变量名 = 函数名;函数指针变量名 =原创 2021-11-19 19:29:57 · 635 阅读 · 0 评论 -
【C语言】字符串排序
文章目录前言(一)需要的相关知识(二)代码实现(1)指针数组指向的字符串常量(2)使用二维数组存放字符串前言在理解二维数组和数组指针的结合使用、指针数组相关内容后,会更易于理解。(一)需要的相关知识指针数组存放常量字符串和二维数组结构存储的字符串排序算法:冒泡排序字符串比较函数string.h中的strcmp函数、字符串拷贝strcpy函数,也有仿写过1(二)代码实现(1)指针数组指向的字符串常量分析:字符串常量存放在.rodata段,属于只读数据区,只能读取,不能修改,所以交换原创 2021-11-18 16:51:23 · 8842 阅读 · 2 评论 -
【C语言】二维数组和数组指针
文章目录(一)二维数组的定义(二)二维数组的本质(三)使用数组指针访问二维数组(1)数组指针访问一维数组(2)数组指针访问二维数组(3)数组指针作为函数参数输出二维数组所有元素(4)一道练习题(一)二维数组的定义类型名 数组名[行数][列数](行数、列数必须是常量表达式)(二)二维数组的本质例如:int arr[5][2] = {1 ,2, 3, 4, 5, 6, 7, 8, 9, 10};逻辑图如下:实质上是由五个一维数组(一维数组下有两个元素)组成。存放方式:行优先存放那我们试原创 2021-11-16 02:15:00 · 1210 阅读 · 0 评论 -
【C语言】深入理解一维数组
文章目录(一)一维数组(二)区分一级指针和一维数组名(三)一维数组与函数结合(四)一维数组做函数形参的退化(一)一维数组类型名 数组名[正数常量表达式](二)区分一级指针和一维数组名#include <stdio.h>int main(){ int arr[5]; int*p = arr; printf("size of arr : %d\n", sizeof(arr)); printf("size of p : %d\n", sizeof(p)); return 0;原创 2021-11-15 19:55:20 · 573 阅读 · 0 评论 -
【C语言】深入理解指针数组和数组指针
文章目录(一)定义(一)定义指针数组:顾名思义就是一个数组,数组中每个元素都是指针类型数组指针:就是一个指向数组的指针,指针变量中保存着数组的地址这里我们区分一个概念数组地址 != 数组首元素地址一维数组例如:int arr[5];标识符含义类型arr数组名int[5]&arr数组地址int[5] *&arr[0]数组首元素地址int*vs2019中显示如下:...原创 2021-11-15 18:13:56 · 491 阅读 · 0 评论 -
【C语言】深入理解二级指针
文章目录(一)指针的定义(二)引入二级指针(三)深入理解二级指针(1)下面举个例子:(2)在(1)的前提下,那要是把所有的类型换成char、short、double类型呢(四)总结(一)指针的定义一级指针:是一个指针变量,指向一个普通变量,并保存该普通变量的地址;二级指针:是一个指针变量,指向一个一级指针,并保存该一级指针的地址;(二)引入二级指针由于一级指针已经很熟悉,这里不再赘述,这里我们只谈谈二级指针下面先简单使用一个二级指针看看#include <stdio.h>i原创 2021-11-15 17:44:31 · 22794 阅读 · 13 评论 -
【C语言】格式化字符串printf()、sprintf()、scanf()、sscanf()函数详解
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码原创 2021-11-14 12:05:24 · 2942 阅读 · 0 评论 -
【C语言】int类型数据小端存储转大端存储
(一)实现代码:思路:32位系统,int 大小4字节,根据大端存储的规则进行字节数据交换,最终返回原数据的首地址即可int* SmallToBig(int* value){ char tmp = '\0'; char* ptr = value; tmp = *ptr; *ptr = *(ptr + 3); *(ptr + 3) = tmp; tmp = *(ptr + 1); *(ptr + 1) = *(ptr + 2); *(ptr + 2) = tmp; retur原创 2021-11-14 10:34:20 · 2362 阅读 · 0 评论 -
【C语言】宏函数计算结构体元素的相对偏移量
文章目录(一)结构体strcut test(二)宏函数详解(三)完整代码测试(四)测试结果(一)结构体strcut teststruct test{ char a; //1+3 int b; //4 char c; //1+3};通过结构体的内存对齐 1的原则可以得到该结构体的大小是12结构体元素的相对0的地址的偏移量分别如下:a 0b 4c 8(二)宏函数详解#define OFFSET_STRUCT(structname, element) (int)&(原创 2021-11-14 10:24:47 · 590 阅读 · 0 评论 -
【C语言】atoi字符串转整型函数仿写
文章目录(一)使用的头文件(二)atoi函数功能(三)思路(四)编程步骤:(五)代码实现(六)结果(一)使用的头文件stdio.h ctype.h(二)atoi函数功能该函数声明在string.h头文件中,用于将字符串转换成整型数据(三)思路要实现该函数,我们需要尽可能的考虑到用户输入数据的各种情况,所谓具有一定的健壮性。可能出现的情况如下:整型、浮点型、正负数、八进制数、带有非法符号的、八进制数、十六进制数等情况 "1243", "a12.43", "+12.45",原创 2021-11-13 21:07:06 · 669 阅读 · 0 评论 -
【C语言】文本文件和二进制文件的拷贝
六、C语言实现文本文件和二进制文件的拷贝1、代码实现#include<stdio.h>#include<assert.h>//文本文件拷贝void TxtFileCopy(FILE* des, FILE* arc){ assert(arc != NULL);//添加断言==if(arc==NULL) printf("源文件不存在,无法读取"); while (1) { char ch = fgetc(arc); if (ch == EOF) break原创 2021-03-21 12:41:36 · 846 阅读 · 0 评论 -
【C语言】结构体对齐规则
结构体对齐规则规则一:结构体中元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构体存储的首地址0开始,每一个元素放置到内存中时,它都会认为内存是以自身类型大小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始(以结构体变量首地址为0计算)。规则二:在满足规则一基础上,检查计算出的存储单元是否为所有元素中最宽的元素的长度的整数倍,是,则结束;若不是,则补齐为它的整数倍。...原创 2021-10-22 18:57:24 · 444 阅读 · 0 评论 -
【C语言】利用指针和函数交换两数的值
利用指针和函数交换两数的值-----------------------------------------------------------------------------------------C语言源代码#include<stdio.h>//利用指针和函数交换两数的值void Exchange(int* p,int* q)//交换函数{ int tmp; tmp = *p; *p = *q; *q = tmp;}int main(){ int a =原创 2020-12-13 19:51:15 · 2633 阅读 · 1 评论 -
【C语言】switch状态机计算字符串中有多少个单词(简易版)
switch实现状态机实现条件:只考虑了多个空格,暂未考虑其他单词合法性等问题,注重思路即可#include <stdio.h>#include <stdbool.h>#include <ctype.h>#include <string.h>//枚举状态0开始,1在单词中,2在单词外,3结束enum status{ BEGIN = 0, INWORD = 1, OUTWORD = 2};int main(){ char s原创 2021-10-25 14:46:31 · 844 阅读 · 0 评论 -
【C语言】判断计算机是大端存储还是小端存储(两种方法)
判断计算机是大端存储还是小端存储文章目录判断计算机是大端存储还是小端存储一、什么是小端存储和大端存储?二、两种实现方式1.直接访问地址2.使用共用体特性查看总结一、什么是小端存储和大端存储?存储方式:小端存储:高位存在高地址上,低位存在低地址上大端存储:高位存在低地址上,低位存在高地址上看到这可能还一知半解,看我下面给分析分析,你一定会明白的!例如:short val = 0x0001;先谈谈当程序运行时,这个数据是在内存上怎样存放的;简单分析下这个十六进制数0001;一、分原创 2021-10-26 17:45:02 · 5333 阅读 · 0 评论 -
【C语言】exit()和_exit()的区别
1. 输出缓冲区在linux系统上,一个进程默认打开三个文件:标准输入stdin,标准输出stdout,标准输出错误stderr2.printf()函数只是将内容写入到缓冲区,并没有直接输出输出条件如下:遇到"\n",输出进程结束,输出主动刷新 fflush(stdout);输出缓冲区满时,输出3、exit()和_exit()的区别exit()会刷新缓冲区的内容,会执行atexit注册的方法_exit()不会刷新缓冲区的内容,直接结束进程,不会执行atexi原创 2021-11-13 19:21:49 · 228 阅读 · 0 评论 -
【C语言】预处理器——条件编译指令的使用
在我们编写项目或者具有较多功能的程序时,我们不得不把具有各个功能的函数,进行分文件处理,这样不仅方便查找函数,而且也便于后期维护。但是分文件处理也会带来一些问题:头文件的重复包含,结果导致,程序无法编译链接通过预编译指令的引出:#ifndef 标记名#define 标记名函数声明、结构体体声明、类声明等 #endif上述预编译指令的意思就是:在预编译阶段,如果没有定义标记名、就定义标记名并将函数声明、结构体声明、类声明等拷贝到引入该头文件的文件中;如果定义了该标记,就结束该预编译指令正确代原创 2021-11-10 12:22:57 · 647 阅读 · 0 评论 -
【C语言】string.h头文件检验字符串函数仿写
c语言string.h头文件常用字符串函数仿写所需头文件:stdio.h stdlib.h string.hstrlen字符串求长度int strlen_my(const char* src_str){ if (NULL == src_str) { return -1; } while (*src_str != '\0') { src_str++; } return src_str - &(src_str[0]);}//递归int strlen_my2(c原创 2021-11-11 14:52:17 · 525 阅读 · 1 评论 -
【C语言】string.h字符数组操作函数仿写
C语言string.h字符数组操作函数仿写所需头文件:stdio.h仿写之前先讲讲void,这个类型不能用来定义普通变量,但是可以定义无类型指针 void* vp;无类型指针void* 不可以直接解引用、vp++、vp–操作,使用该操作之前必须强制类型转换;仿写示例:memset 用ch字符填充缓冲区mem_addr//memsetvoid* memset_my(void* mem_addr, unsigned char ch, size_t size){ if (mem_add原创 2021-11-12 11:00:35 · 304 阅读 · 1 评论 -
【C语言】main函数的参数
一、main()主函数的参数问题#include <stdio.h>int main(int argc, char *argv[]){ return 0;}argc是一个整型变量,存储的是主函数的参数个数argv[]是一个字符型指针数组,其中存储的是主函数的参数字符串,是一个参数列表注意:1.主函数默认至少接受一个参数,那就是执行程序命令的本身例如:./main2.传递参数时:用空格来区分传递的参数例如:./main abc def3.传递的参数的类原创 2021-04-24 15:44:11 · 2656 阅读 · 0 评论 -
【C语言】字符串的拷贝
五、C语言用函数实现字符串的复制(不使用strcpy()函数)(内含多种方法)—————————————————————————————(1)第一种方法:使用数组下标访问(推荐)#include<stdio.h>//第一种方法:使用数组下标访问void Copy1(char*des,char*src)//des是目标,src是源字符串{ int i; for(i=0;src[i]!='\0';i++)//当src[i]出现'\0'时,代表字符串遍历结束 { des[i]=原创 2020-12-17 01:09:38 · 5539 阅读 · 1 评论 -
【C语言】中缀表达式转后缀表达式
三、中缀表达式转后缀表达式例如:中缀表达式:123+5*21-7/(4-3)后缀表达式:123 5 21 * + 7 4 3 / -转换规则:如果是数字,直接输出;如果是左括号,直接入栈;如果是右括号,一直出栈,直到遇到第一个左括号;如果是*或者/,一直出栈,直到栈空或者左括号或者遇到+ -,当前符号入栈;如果是+或者-,一直出栈,直到栈空或者遇到左括号,当前符号入栈;如果中缀表达式走完,弹出占中所有的元素1、声明#pragma once//结构声明typedef ch原创 2021-03-14 15:50:10 · 2580 阅读 · 0 评论 -
【C语言】求斐波那契第N项
一、非递归实现代码:#include <stdio.h>int Fibo(int num){ int f1 = 1; int f2 = 1; int f3 = 2; if (num <= 0) { return 0; } else if (num < 3 && num > 0) return f1; else { for (int i = 3; i <= num; i++) { f3 = f1 + f2;原创 2021-04-11 15:10:55 · 1097 阅读 · 0 评论 -
【C语言】打印n行杨辉三角
一、使用二维数组实现#include <stdio.h>//释放堆区空间void freespace(int* arr[], int size){ if(arr == NULL) return; for(int i = 0; i < size; i++) { free(arr[i]); arr[i] = NULL; }}//杨辉三角void yang(int*arr[], int rows){ if(arr == NULL) return; for原创 2021-10-22 16:14:37 · 3379 阅读 · 0 评论 -
【C语言】输出1-1000内的完数,形如6 = 1+2+3
二、完数:完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。用C语言输出1-1000内的完数,形如6 = 1+2+3#include<stdio.h>//实现打印出1-1000内所有的完数,格式为: 6=1+2+3//1.判断一个数是不是完数bool IsPerfect(int num){ int tmp=0;//保存所有因子的和 for (int i = 1; i &原创 2020-12-10 18:58:14 · 10728 阅读 · 4 评论 -
【C语言】有一行电文按下面规律译成密码
四、有一行电文,已按下面规律译成密码题目1、C语言代码#include<stdio.h>void Password(char ch){ char arr[27];//保存26个小写字母 char brr[27];//保存26个大写字母 char a = 'a'; char b = 'A'; for (int i = 1; i < 27; i++)//小写字母赋值 { arr[i] = a; a++; } for (int i = 1; i < 2原创 2020-12-14 02:01:01 · 6449 阅读 · 5 评论 -
【C语言】输入一个数 1.输出它是几位数 2.逆序输出 3.正序输出
C语言一、输入一个数(这里用函数实现)1.输出它是几位数2.逆序输出3.正序输出#include<stdio.h>#include<math.h>//这个真的(//∇//)很重要哦(*´ο`*)/*输入一个数1.输出它是几位数2.逆序输出3.正序输出*///1.先写它是几位数(采用去掉个位的思想)int Count(int num){ int i; if(num==0) { return 1;原创 2020-12-10 01:09:32 · 2517 阅读 · 1 评论