详识C语言
文章平均质量分 80
CaojunjiaOnly
这个作者很懒,什么都没留下…
展开
-
【详识C语言】程序环境和预处理
_FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__//文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则未定义这些预定义符号都是语言内置的。#define reg register //为 register这个关键字,创建一个简短的名字;) //用更形象的符号来替换一种实现case //在写case语句的时候自动把 break写上。原创 2024-03-06 23:57:18 · 891 阅读 · 1 评论 -
【详识C语言】C语言文件操作
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。原创 2024-03-06 21:26:42 · 1101 阅读 · 0 评论 -
【详识C语言】动态内存管理
这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。如果开辟成功,则返回一个指向开辟好空间的指针。如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器。free函数用来释放动态开辟的内存。如果参数 ptr 指向的空间不是动态开辟的,那free函数的行为是未定义的。原创 2024-03-06 20:52:34 · 1089 阅读 · 0 评论 -
【详识C语言】自定义类型之三:联合
联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。//联合类型的声明 union Un {char c;int i;//联合变量的定义//计算连个变量的大小。原创 2024-03-06 20:29:50 · 474 阅读 · 0 评论 -
【详识C语言】自定义类型之二:枚举
enum Day//星期Mon,Tues,Wed,Thur,Fri,Sat,Sunenum Sex//性别MALE,FEMALE,SECRET };enum Color//颜色 {RED,GREEN,BLUE以上定义的enum Dayenum Sexenum Color都是枚举类型。{}中的内容是枚举类型的可能取值,也叫枚举常量。这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。enum Color//颜色RED=1,GREEN=2,原创 2024-03-06 20:25:25 · 381 阅读 · 0 评论 -
【详识C语言】自定义类型之一:结构体
有了结构体类型,那如何定义变量,其实很简单。int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2//初始化:定义变量的同时赋初值。struct Stu //类型声明//名字int age;//年龄//初始化int data;//结构体嵌套初始化//结构体嵌套初始化位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int、unsigned int 或signed int2.位段的成员名后边有一个冒号和一个数字。struct A {原创 2024-03-06 17:14:14 · 1245 阅读 · 0 评论 -
C语言指针详解进阶2
数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组,比如:那要把函数的地址存到一个数组中,那这个数组就叫,那函数指针的数组如何定义呢?答案是:parr1parr1先和[]结合,说明parr1是数组,数组的内容是什么呢?是int (*)()类型的函数指针。函数指针数组是一个数组,每个元素都是一个函数指针。函数指针指向函数的内存地址,可以用来动态地调用函数。通过定义一个函数指针数组,可以将多个不同的函数作为数组的元素,便于根据需要选择并调用特定的函数。原创 2024-03-05 15:03:14 · 416 阅读 · 0 评论 -
[字符串和内存函数]错误信息报告函数strerror详解
strerror是一个C库函数,用于将转换为对的错误信息字符串。它接受一个整数参数errno,返回一个指向错误信息字符串的指针。errno是一个全局变量,可以直接使用。它在C语言中用于表示发生错误时的错误码。它是一个整数,通常被定义为指向一个extern int类型的宏。当函数或系统调用发生错误时,它会被设置为相应的错误码,以便程序可以根据错误码进行适当的错误处理。原创 2023-09-17 12:08:31 · 1583 阅读 · 6 评论 -
[字符串和内存函数]strcmp和strncmp以及memcmp的区别
memcmp函数用于比较两个内存区域的内容。这个函数通过比较两个内存区域的字节进行操作,并返回一个整数值来表示比较结果。如果返回值小于0,表示第一个内存区域小于第二个;如果返回值大于0,表示第一个内存区域大于第二个;如果返回值等于0,表示两个内存区域相等。memcmp函数比较的是字节序列,不仅可以用来比较字符串,也可以用来比较其他类型的数据。strncmp是strcmp的一种变体函数,它除了比较两个字符串的内容外,还可以指定比较的长度。它接受三个参数,分别是要比较的两个字符串和要比较的长度。原创 2023-09-17 11:39:09 · 1445 阅读 · 3 评论 -
[字符串和内存函数]strcat和strncat的区别
strcat和strncat是C语言中的字符串连接函数。strcat函数用于将源字符串追加到目标字符串的末尾,直到遇到源字符串的结束符'\0'。它的声明如下:strncat函数也用于将源字符串追加到目标字符串的末尾,但它会限制连接的字符数量。它的声明如下:区别如下- strcat没有字符数量限制,会将整个源字符串添加到目标字符串的末尾。- strncat有一个额外的参数n,表示最多连接n个字符。如果源字符串的长度小于n,那么将整个源字符串添加到目标字符串的末尾。原创 2023-09-17 11:12:25 · 1211 阅读 · 0 评论 -
[字符串和内存函数]strcpy和strncpy的区别
strcpy和strncpy都是C语言中的字符串拷贝函数,用于将一个字符串复制到另一个字符串数组中。它们的区别在于如下几个方面:参数个数:strcpy只接受两个参数,即目标字符串和源字符串,而strncpy接受三个参数,分别是目标字符串、源字符串和要拷贝的最大字符数。拷贝长度:strcpy会将源字符串中的所有字符都拷贝到目标字符串中,直到遇到空字符’\0’为止。而strncpy会拷贝指定长度的字符到目标字符串中,无论是否遇到空字符。字符串结束标志:strcpy会自动在目标字符串的末尾添加空字符’原创 2023-09-17 10:50:34 · 1235 阅读 · 1 评论 -
[字符串和内存函数]strcat字符串函数的详解和模拟
strcat函数是C语言中用于将一个字符串追加到另一个字符串末尾的函数。其函数原型如下:其中,`dest`是目标字符串,`src`是要追加的字符串。函数将src中的内容追加到dest的末尾,并返回指向dest的指针。使用strcat函数时,需要确保dest字符串有足够的空间来容纳追加的字符串,否则会导致内存越界错误。例如,下面的代码演示了如何使用strcat函数将两个字符串拼接在一起:输出结果为: Hello World。原创 2023-09-17 10:28:34 · 103 阅读 · 0 评论 -
[字符串和内存函数]strcmp字符串函数的详解和模拟
strcmp函数是一个用于比较两个字符串的C标准库函数。strcmp函数会比较str1和str2两个字符串的字符序列,并返回一个整数值来表示它们之间的大小关系。返回值的含义如下:- 如果str1和str2相等,返回0。- 如果str1小于str2,返回一个负数。- 如果str1大于str2,返回一个正数。输出结果为: str1小于str2。原创 2023-09-17 10:05:01 · 128 阅读 · 0 评论 -
[EasyX库安装介绍讲解】超详细入门级
EasyX 在使用上非常简单。比如:启动 Visual C++,创建一个空的控制台项目(Win32 Console Application),然后添加一个新的代码文件(.cpp),并引用graphics.h头文件就可以了。#include // 引用图形库头文件int main()// 创建绘图窗口,大小为 640x480 像素// 画圆,圆心(200, 200),半径 100_getch();// 按任意键继续// 关闭绘图窗口return 0;原创 2023-08-29 15:41:43 · 4208 阅读 · 3 评论 -
C语言指针详解进阶1
数组指针是指针?还是数组?答案是:指针。我们已经熟悉:整形指针: 能够指向整形数据的指针。浮点型指针: 能够指向浮点型数据的指针。那数组指针应该是:能够指向数组的指针。原创 2023-08-06 17:32:08 · 230 阅读 · 6 评论 -
深度剖析数据在内存中的存储
前面我们已经学习了基本的内置类型:char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数以及他们所占存储空间的大小。1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。2. 如何看待内存空间的视角。原创 2023-08-02 17:38:34 · 553 阅读 · 3 评论 -
C语言实用调试详解
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优 的,以便用户很好地使用。需求 ——> 设计和开发 ——> 测试 ——> 产生验收 ——> 发布主要用于开发和调试阶段。生成的代码通常包含了调试信息,以便在出现错误时能够更容易地进行调试和定位问题。编译器会进行更多的优化,以提供更好的调试体验。生成的可执行文件通常较大,占用更多的内存。原创 2023-08-01 12:37:31 · 1071 阅读 · 3 评论 -
C语言结构体讲解
为什么要出现结构体?描述一个学生:结构成员的类型整数类型:浮点数类型:字符类型:字符串类型(使用字符数组):枚举类型:自定义结构体类型:结构体变量的定义和初始化定义:(全局变量//局部变量)定义变量的同时赋初值//按照顺序初始化://指定成员来初始化: 例如:错误写法:实参传递给形参的时候,形参是实参的一份临时拷贝,对形参的修改不会影响实参 正确写法: 注:结构体的指针可以直接用->指向成员名原创 2023-08-01 10:02:52 · 311 阅读 · 2 评论 -
C语言指针详解
指针理解的2个要点:1. 指针是内存中一个最小单元的编号,也就是地址2. 平时口语中说的指针,通常指的是指针变量,是用来存放内存地址的变量总结:指针就是地址,口语中说的指针通常指的是指针变量。那我们就可以这样理解:内存指针变量我们可以通过&(取地址操作符)取出变量的内存其实地址,把地址可以存放到一个变量中,这个 变量就是指针变量总结:指针变量,用来存放地址的变量。(存放在指针中的值都被当成地址处理)。那这里的问题是:一个小的单元到底是多大?(1个字节)如何编址?原创 2023-07-29 17:34:27 · 286 阅读 · 4 评论 -
【C语言所有操作符详解2】
表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。例如,在算术运算中,如果操作数的类型不一致,编译器会将较低等级的类型转换为较高等级的类型,以便进行运算。代码1在计算的时候,由于*比+的优先级高,只能保证,*的计算是比+早,在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义 的。原创 2023-07-28 16:50:33 · 216 阅读 · 3 评论 -
【C语言所有操作符详解1】
< 左移操作符>> 右移操作符注:移位操作符的操作数只能是整数。移动的是二进制的位整数的二进制的表示形式有三种:原码,反码,补码2);0);a = -a;p = &a;//这样写行不行?//这样写行不行?return 0;C语言的解引用操作符是*。它用于访问指针所指向的内存地址中存储的值。例如,在下面的代码中,我们定义了一个整型指针p,并将其指向变量a的地址。然后,通过解引用操作符*,我们可以访问并修改p所指向的内存地址中存储的值。int a = 20;原创 2023-07-27 17:33:45 · 165 阅读 · 7 评论 -
C语言-数组
1. 数组是使用下标来访问的,下标是从0开始。2. 数组的大小可以通过计算得到。原创 2023-07-24 20:41:11 · 148 阅读 · 2 评论 -
C语言-函数2
告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数声明决定不了。函数的声明一般出现在函数的使用之前。要满足先声明后使用。函数的声明一般要放在头文件中的。//提前声明int main(){}int Add(int x, int y) //定义{}函数的定义是指函数的具体实现,交待函数的功能实现。未来在工程中代码是比较多的 函数在add.h(头文件)中声明在add.c(源文件)中定义在test.c(源文件)中实现在test.c前有写。原创 2023-07-23 17:25:55 · 115 阅读 · 8 评论 -
【C语言-函数1】
数学中我们常见到函数的概念。但是你了解C语言中的函数吗?自定义函数和库函数一样,有函数名,返回值类型和函数参数。但是不一样的是这些都是我们自己来设计。这给程序员一个很大的发挥空间。原创 2023-07-23 08:36:17 · 241 阅读 · 10 评论 -
分支和循环语句2
它只能从最内层循环退出到上一层的循环。//Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。但是某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。//rand 函数生产的随机数的范围是: 0~RAND_MAX(32767)//在新的范围(6~10)继续求中间值下标 (5+9)/2 = 7。//在新的范围(6~7)继续求中间值下标 (5+6)/2 = 5。//在新的范围(7~7)继续求中间值下标 (6+6)/2 = 6。原创 2023-07-18 16:42:37 · 196 阅读 · 7 评论 -
分支与循环语句1
用于跳过循环中的某个迭代,即使循环条件没有达到结束的条件,也可以跳过当前迭代,继续执行下一次迭代。例如,在一个for循环中,如果某个条件不满足,就可以使用continue语句跳过当前迭代,继续执行下一次迭代。控制语句用于控制程序的执行流程,以实现程序的各种结构方式(C语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有九种控制语句。函数返回值为读取到的字符的 ASCII 码。PS:注意11,当i等于10的时候仍然进入循环,i++变为11,输出,下一次不进入循环。原创 2023-07-16 12:18:11 · 117 阅读 · 3 评论