![](https://img-blog.csdnimg.cn/90e45832a83546bb845832feee5b99d2.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C语言修行
文章平均质量分 68
分析C语言中的各个细节美。内容持续更新。
Bazinga bingo
自律的顶端是孤独,孤独的顶端是自由
展开
-
C语言修行之函数篇(二)strcasecmp,strncasecmp —— 比较字符串字符
a = “ah”,*b= “AbjBh”, 返回值:6。a = “ah”,*b= “AbjBh”, 返回值:6。(2)若参数s1大于s2,则返回大于0的值。b = “AbjBh”, 返回值:-106。b = “AbjBh”, 返回值:-1。b = “AbjBh”, 返回值:0。b = “AbjBh”, 返回值:0。b = “Ah”, 返回值:-6。b = “Ab”,返回值:106。b = “Ah”, 返回值:-6。b = “Ab”, 返回值:0。b = “Ab”, 返回值:0。原创 2023-10-30 23:17:35 · 2341 阅读 · 0 评论 -
C语言修行之函数篇(一)tolower —— 转换为小写字母
对于大写字母,如果在当前语言环境中存在小写表示形式,则tolower()返回其小写等效物。否则,tolower()函数执行相同的任务。返回的值是转换后的字母,如果不能转换则返回输入的字符。原创 2023-10-30 23:07:53 · 537 阅读 · 0 评论 -
C语言修行之基础篇 (一) 面向过程与面向对象解析与对比
大家都知道 C语言面向过程,C++和Jave面向对象,但是什么样的属于面向对象?什么样的属于面向过程?两者又有什么特点呢?对这两个概念不是很理解的童鞋,可以看看这个文章希望可以让大家对面向对象与面向过程有深入的认识。面向过程:是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。来个抽象图理解下举个例子,下五子棋,面向过程的设计思路是首先分析解决这个问题的步骤:(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)原创 2022-07-09 10:48:46 · 1180 阅读 · 0 评论 -
C语言修行之基础篇(二) 内存话题
**内存是程序的立足之本。**就像我们立足之本是什么呢?是物联网?是网络游戏?当然是土地,我们生存必须要土地生存空间,总不能悬空生存是吧。回到程序,对于程序来说内存是非常重要的。所以作为一个程序员对内存的了解是非常有必要的。对内存了解越深刻,写出来的代码也就越优秀。现在就开启内存这个大话题来认识下内存。在认识内存之前,先来聊聊程序是什么?程序为什么要不断的更新程序?程序的目的是是为了去运行;程序的运行是为了得到一定的目的;为了得到新的目的,所以不断更新程序。计算机用来计算的,这里的计算就是在计算数据。原创 2022-07-09 10:54:35 · 401 阅读 · 0 评论 -
C语言修行之基础篇 (三) 指针与野指针
指针的实质就是变量,它与普通变量没有区别。指针全称为指针变量,简称为指针。内存分布既然指针变量和普通变量一样,那他们的赋值就可以是一样的吗?a = 8; 可以操作p = 8; 编译器不让指针这么操作。虽然指针变量实质上也是普通变量,但是它们的用途和普通变量不同。区别:普通变量a空间存放的int类型的数据指针变量p空间存放的是另外一个变量的地址,而不是存放int类型数据p = (int *)8; 可以操作,在这里将8这个数字强制类型转换为(int *)类型的8;这里相当原创 2022-07-10 10:35:22 · 483 阅读 · 0 评论 -
C语言修行之基础篇(四) const关键字与指针
const关键字,在C语言中用来修饰变量,表示这个变量是常量。const用来修饰指针,有4种方式:第一种,const int *pp本身不是const,p指向的变量是const第二种,int const *pp本身不是const,p指向的变量是const第三种,int * const pp本身是const,p指向的变量不是const第四种,const int * const pp本身是const,p指向的变量也是constconst修饰的变量在GCC环境下,变量是可以改变的。因为const是gc原创 2022-07-11 20:50:53 · 400 阅读 · 0 评论 -
C语言修行之基础篇(五) 指针与数组
**从编译器来讲,**数组变量也是变量,和普通变量和指针变量没有本质区别。变量的本质就是一个地址,这个地址在编译器中决定具体数值,具体数值和变量名绑定,变量类型决定从这个地址开始的长度。**从内存来讲,**数组变量就是一次分配多个变量,而且这多个变量在内存中的存储单元是依次连接的。正是因为在内存空间的分配特点,数组可以用指针进行访问。数组几个关键符号(a a[0] &a &[0])前提:在32位系统内,a[10]a就是数组名。a做左值时表示整个数组的所有空间(10x4=40字节)。又因为C语言规定数组原创 2022-07-12 08:55:48 · 613 阅读 · 0 评论 -
C语言修行之基础篇 (六) 指针的数据类型含义和强制类型转换的解析
int*就是指针类型,只要是指针类型的都是占4个字节,解析方式都是按照地址的方式来解析的。所有的指针类型(不管是int*、char*、double*)的解析方式是相同的,都是地址。指针指向的那个变量的类型(它所对应的内存空间的解析方法)要取决于指针类型。如指针是int*的,那么指针所指向的变量就是int类型的。C语言中的数据类型的本质,就是决定了这个数在内存中怎么存储的问题,也就是决定了这个数如何转成二进制的问题。p(指针变量本身)是int*类型,*p(指针指向的那个变量)是int类型。...原创 2022-07-18 19:23:57 · 553 阅读 · 0 评论 -
C语言修行之基础篇 (七) 指针与函数知识点
const用来修饰指针做函数传参,作用就在于声明在函数内部不会改变这个指针所指向的内容,所以给该函数传一个不可改变的指针(char*p=“linux”)不会触发错误,而一个未声明为const的指针的函数,你给他传一个不可更改指针的时候就要小心出现错误。1、函数名是一个符号,表示整个函数代码段的首地址,实质是一个指针常量,所以在程序中使用到函数名都是当地址用的,用来调用函数的。在C语言中没有传值和传址两种方式,C语言本身函数调用时一直都是传值的,只不过传的值可以是变量名,也可以是变量的指针。...原创 2022-07-18 19:31:16 · 307 阅读 · 0 评论 -
C语言修行之基础篇 (八) 指针、数组与sizeof运算符
主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返回()里面的变量或者数据类型占用的内存字节数。,用来返回一个字符串的长度(注,字符串的长度是不计算字符串末尾的‘/0’的),strlen接收的参数必须是一个字符串。...原创 2022-07-18 19:36:55 · 301 阅读 · 0 评论 -
C语言修行之基础篇 (九) 一文秒懂指针数组与数组指针
1、找核心:先搞清楚你定义的符号是谁2、找结合:看谁跟核心最近,谁和核心结合三大与核心结合:(1)和*结合表示核心为指针 (2)和[ ]结合表示核心为数组 (3)和()结合表示核心为函数。原创 2022-09-03 10:23:13 · 393 阅读 · 0 评论 -
C语言修行之基础篇 (十)一文秒懂函数指针
假设有个函数为void func(void),对应的函数指针为void (*p)(void)。———— 函数指针定义p = func;————函数指针赋值p();———— 函数指针调用在C语言编译器中定义,函数名做右值的时候加不加&效果和意义都是一样的。原创 2022-09-03 10:55:59 · 304 阅读 · 0 评论 -
C语言修行之基础篇 (十一)关键字 typedef
在C语言中的类型有2种(内建类型ADT,自定义类型UDT):第一种是C语言编译器中特有的类型(char/int/double等)第二种是用户自定义的类型,不是语言自带的是程序员自定义类型(数组类型,结构体类型,函数类型等)在编程中有的时候使用的自定义类型太长了,用起来不方便。就用到typedef进行重命名为一个短点名字。typedef是给类型重命名的,也就是说typedef加工出来的都是类型,而不是变量。原创 2022-09-03 11:31:44 · 1129 阅读 · 4 评论 -
C语言修行之基础篇 (十二)二重指针
时,就是告诉编译器程序员想用这个p指针是指向char型数据的,在使用的时候如果程序员误将这个变量指向double或者其他类型的变量的时候,可能程序员没有注意到这个错误而这个错误会造成严重的错误。2、所有的指针变量本质都是相同的,都是4个字节,都是用来指向别的东西的,不同类型的指针变量只是可以指向变量类型不同。4、二重指针其实也是一种数据类型,它指向的变量类型必须是一重指针,编译器在编译时会根据二重指针的数据类型来做。1、二重指针、一重指针、数组指针、结构体指针、普通指针的本质都是相同的,都是变量。原创 2022-09-03 11:49:15 · 1176 阅读 · 0 评论 -
C语言修行之基础篇 (十三) 二维数组
— 不可以这样赋值的—— a[0]表示二维数组的第一维的第一个元素,相当于是第二维的整体数组的数组名,数组名表示数组首元素首地址*(p4 + 4) —— 解引用。原创 2022-09-03 12:06:31 · 1536 阅读 · 0 评论 -
C语言修行之基础篇(十四)管理内存:栈(stack)、堆(heap)、数据区(.data)
C语言中所有变量和常量所使用的内存只有三种情况1、相同点:三种获取内存的方法,都可以给程序提供可用内存,都可以用来定义变量给程序用。2、不同点:栈内存对应C语言中的普通局部变量;堆内存完全是独立于我们的程序存在和管理的;数据段对于程序来说对应C程序中的全局变量和静态局部变量,函数内部临时使用,出了函数不会用到,就定义局部变量堆内存和数据段几乎拥有完全相同的属性,大部分时候是可以完成替换的。但是生命周期不一样。堆内存的生命周期从malloc开始到free结束;原创 2022-11-13 14:14:08 · 2975 阅读 · 0 评论 -
C语言修行之基础篇 (十五)字符串是什么?C语言中有字符串类型吗?
C语言没有原生字符串类型(原生类型指的是类似C语言中int,double等)。高级语言(jave、C#等)中就有字符串类型,有个string来表示字符串,用法和int一样定义。但是C语言中没有string类型,C语言中的字符串是通过字符指针来间接实现的。这里举例来深刻理解下这个神奇的过程:定义:char *p=“linux”;解析:1、这里的p可以叫做字符串,但是实际上p只是个字符指针,占4个字节。2、这个字符指针指向一个字符串的起始地址。3、“linux”分配在代码段,占6个字节(包含‘\0’原创 2022-11-14 22:39:26 · 2028 阅读 · 0 评论 -
C语言修行之基础篇 (十六) 结构体详解
C语言中有2中类型:原生类型和自定义类型。结构体就是其中一种自定义类型。1、结构体定义时需要先定义结构体类型,然后再用类型来定义变量。2、在定义结构体类型的同时定义结构体变量。// 定义结构体类型 struct student {int age;};// 在函数中使用结构体类型定义变量 struct student p2;// 定义类型的同时定义变量 struct people {int age;} p1;// 在函数中直接使用变量 p1 . age = 23;原创 2022-11-16 12:00:16 · 786 阅读 · 0 评论 -
C语言修行之基础篇 (十七) 共用体union详解
/ 共用体类型定义 union s {int a;char b;};// 共用体变量的定义 p1 . a = 23;// 共用体元素的使用。原创 2022-11-17 19:46:28 · 880 阅读 · 0 评论 -
C语言修行之基础篇(十八)详解C语言变量的四大属性
整个系统(Linux系统、uboot)正常启动并长期运行是由很多变量共同作用而成的,类比我们社会的运作也是由于一代又一代的人不断辛勤努力,不断向社会发展贡献自己的价值一样。本文章从四大特征详细了解下这类在系统中不断更新换代的“人们” —— C语言变量。原创 2022-12-18 22:31:47 · 1482 阅读 · 0 评论 -
C语言修行之基础篇(十九) 详解裸机程序与操作系统
封装的目的:添加缓冲机制。因为有人下意识想要屏蔽不同屏蔽不同操作系统的差异,因此在封装API成库函数的时候,尽量使用同一套接口。1、单纯的API只是提供了极简单没有任何封装的服务函数,这些函数应用程序是可用的,但是不太好用。阶级:一部分人脱离了直接产生价值的体力劳动专职指挥(资源得到了更大限度的使用,优化了配置,提升整体效率)人类社会发展:人人都干活(没有专业分工,直接做产生价值的事,因为当时生产力低下,人口稀少)。1、不同操作系统API是不同的,但是都能完成所有的任务,只是完成一个任务调用的API不同。原创 2023-01-01 09:52:27 · 1411 阅读 · 0 评论 -
C语言修行之基础篇 (二十)详解main函数
文章目录main函数标准写法main函数为什么需要返回值?谁调用main函数?linux下一个新程序执行的本质谁给main函数传参?为什么要给main函数传参?main传参实现过程main函数标准写法int main(void)int main(int argc, char **argv)int main(int argc, char *argv[])main函数为什么需要返回值?1、函数在设计的时候设计了参数和返回值(参数是函数的输入,返回值是函数的输出)2、函数通过返回值对外输出数据原创 2023-01-03 10:54:22 · 2502 阅读 · 0 评论 -
C语言修行之基础篇 (二十一)详解void类型
文章目录编程语言分:强类型语言和弱类型语言。数据类型的本质含义void类型的本质为什么需要void类型编程语言分:强类型语言和弱类型语言。强类型语言 中所有的变量都有自己固定的类型,这个类型有固定的内存占用,有固定的解析方法。弱类型语言 中没有类型的概念,所有变量全都是一个类型(都是字符串),程序在用的时候再根据需要来处理变量。注:C语言属于强类型语言数据类型的本质含义1、数据类型的本质就决定 变量的内存占用数,和内存的解析方法。2、C语言中变量必须有确定的数据类型 ,如果一个变量没有确定原创 2023-01-04 21:04:20 · 786 阅读 · 0 评论 -
C语言修行之基础篇 (二十二) C语言中的NULL
文章目录NULL在C/C++中的标准定义从指针角度解析NULL本质为什么要让一个野指针指向内存0地址处?为什么需要NULL?NULL 和 ‘\0’ 和 ‘0’ 和 0 区别NULL在C/C++中的标准定义1、NULL不是关键字,本质上是个宏定义2、NULL标准定义:#ifdef _cplusplus // 判断当前编译环境是C还是C++#define NULL 0 // C++环境下,编译器预先定义一个宏_cplusplus #原创 2023-01-04 21:05:41 · 4553 阅读 · 2 评论 -
C语言修行之基础篇 (二十三) 运算中的临时匿名变量
文章目录C语言和汇编的区别C语言的一些“小动作”C语言运算中的临时匿名变量应用C语言和汇编的区别1、C语言是高级语言;汇编语言是低级语言2、低级语言是汇编语言和机器操作相对应,汇编语言只是CPU的机器码的助记符,用汇编语言写程序必须拥有机器的思维。由于不同的CPU设计时指令集差异很大,则用汇编编程的差异很大。高级语言是对低级语言进行了封装,给程序员提供一个靠近人类思维的一些语法特征,可以按照自己的逻辑原理来编程。更高级语言如Java、C#等只是进一步强化了C语言提供的人性化的操作界面语法,在易用原创 2023-01-06 08:54:36 · 533 阅读 · 2 评论 -
C语言修行之基础篇 (二十四) 详解C语言预处理
文章目录源代码到可执行程序的过程编程中常见的预处理gcc几种编译方式常见的预处理1 —— 头文件包含常见的预处理2 —— 注释常见的预处理3 —— 条件编译常见的预处理4 —— 宏定义源代码到可执行程序的过程源代码.c ->(编译)-> elf可执行程序源代码.c ->(编译)-> 目标文件.o -> (链接)-> elf可执行程序源代码.c ->(编译)-> 汇编文件.S ->(汇编)-> 目标文件.o -> (链接)->原创 2023-01-06 08:55:20 · 340 阅读 · 0 评论 -
C语言修行之基础篇 (二十五) 详解C语言第一大功臣:函数
文章目录C语言为什么有函数?函数书写的一般原则函数是动词,变量是名词函数的实质是:数据处理器函数的基本使用函数原型和作用编译器的工作流程C语言为什么有函数?1、整个程序分成多个文件,一个文件分成多个函数,一个函数分成多个语句。这就是整个程序的组织形式,这样组织的好处在于:分化问题,便于编写程序,便于分工。2、函数的出现是程序员、架构师的需要,不是编译器、CPU需要。3、函数的目的就是实现模块化编程。提高程序的可移植性。函数书写的一般原则1、遵循一定格式。函数的返回类型、函数名、参数列表等。原创 2023-01-07 11:48:11 · 534 阅读 · 0 评论 -
C语言修行之基础篇 (二十六) 递归函数
递归函数就是函数中调用了自己本身这个函数的函数。递归函数和循环的区别。递归不等于循环。递归函数解决哪些问题?求阶乘,求斐波那契数列。原创 2023-02-21 21:54:32 · 209 阅读 · 0 评论 -
C语言修行之基础篇(二十七)函数库
文章目录什么是函数库?函数库的由来函数库的提供形式:动态链接库与静态链接库函数库中库函数的使用字符串函数数学库什么是函数库?1、函数库是一些事先写好的函数的集合。2、函数是模块化的,可以被复用。A写好的一个函数然后共享出来,当B有相同的需求就不要自己写直接用A写好的这个函数就可以。函数库的由来函数库一开始是没有的,每个人写程序都是要从零开始自己写。时间长了慢慢早期的程序员就积累下来一些有用的函数。早期的程序员经常参加行业聚会,在这些聚会上相互各自的函数库。后面程序员中的一些大神提出把大家各原创 2023-02-24 09:10:58 · 738 阅读 · 0 评论 -
C语言修行之归纳篇(一)存储类相关的关键字
C语言变量四大属性:存储类、作用域、生命周期、链接属性。从这四个方面来理解变量相互之间是独立,对程序员编程没有太大的意义。但是将它们连起来看就会对变量有更深的理解。本文章结合这四大属性来看看存储类相关的关键字修饰之后的变量。注:了解C语言变量四大属性的概念以及相关细节可看。原创 2022-12-19 21:47:36 · 357 阅读 · 0 评论 -
C语言修行之归纳篇(二)sizeof与strlen对比表
sizeof与strlen区别原创 2022-11-14 22:27:08 · 591 阅读 · 0 评论 -
C语言修行之归纳篇(三)操作系统管理内存:栈(stack)、堆(heap)、数据区(.data)对比表
操作系统管理内存(堆栈,堆,数据区)总结对比原创 2022-11-13 17:12:25 · 360 阅读 · 0 评论