c语言语法
文章平均质量分 91
专门介绍C语言语法
掘根
须知少时凌云志,曾许人间第一流
展开
-
VS调试技巧
当我们发现程序中存在的问题的时候,那下⼀步就是找到问题,并修复问题。这个找问题的过程叫称为调试,英⽂叫debug(消灭bug)的意思。调试⼀个程序,⾸先是承认出现了问题,然后通过各种⼿段去定位问题的位置,可能是逐过程的调 试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码, 重新测试。原创 2024-05-07 23:23:28 · 719 阅读 · 5 评论 -
memcmp,memset函数详解
memcmp 是 C 和 C++ 标准库中的一个函数,用于比较两个内存区域的内容。它定义在 <string.h>(C)或 <cstring>(C++)头文件中。memcmp 函数逐字节地比较两个内存块,直到发现不同的字节或到达指定数量的字节。函数原型如下:参数说明:返回值:使用示例: 注意:memcmp 不会考虑数据类型或内存对齐,它只是简单地逐字节比较。 memcmp 不会检查指针是否为空或无效。如果传递了空指针或无效指针给 memcmp,可能会导致程序崩溃或其他未定义的行为。原创 2024-04-30 08:49:15 · 916 阅读 · 0 评论 -
memcpy,memmove函数详解
memcpy 是一个在 C 和 C++ 中常用的库函数,用于从源内存块复制指定数量的字节到目标内存块。这个函数定义在 <string.h>(C)或 <cstring>(C++)头文件中。函数原型如下:参数说明:返回值:memcpy 返回 dest 的值(即目标内存块的指针),但通常在实际编程中这个返回值并不被使用,因为复制操作是否成功通常是通过其他方式(如检查是否发生了内存访问错误)来判断的。使用举例以下是一个使用 memcpy 函数的简单例子,该例子展示了如何从一个字符数组(源)复制数据到另一个字原创 2024-04-30 08:36:25 · 710 阅读 · 0 评论 -
strtok,perror,strerror函数·
。我们可以看个例子运行结果。原创 2024-04-30 08:11:42 · 352 阅读 · 1 评论 -
strcmp,strncmp函数详解
可以定义一些宏来简化比较操作,但这通常不会改变算法的基本结构。s1++;s2++;原创 2024-04-29 21:01:00 · 1174 阅读 · 0 评论 -
strstr,strnstr函数详解
查找子字符串成功后,用strncpy修改内存块内容。输出结果:由输出的结果可知,pch的内容为str的子字符串,指向的地址是第一次相同的位置,也就是说pch指向的内存块是str所指向的内存块。当用strncpy修改pch所指向的内存块值时,其str所指向的对应内存块内容发生改变。用memcpy替换strncpy,其输出的结果是相同的。查找子字符成功,strncp的长度修改,引起结果异常。结果。原创 2024-04-29 20:59:36 · 1320 阅读 · 1 评论 -
strcpy,strncpy函数详解
str1指向的是常量字符串,是不可以被修改掉的,目标空间必须是可以被修改的,因为要将拷贝的字符串放在目标空间中。strncpy函数的模拟实现方式可以有多种,但基本的思路都是按照strncpy的定义来进行:复制源字符串的前n个字符到目标字符串,并确保目标字符串至少包含n个字符(如果需要的话,用空字符\0填充剩余部分)。这里的代码会出错,'\0'是停止拷贝的终止条件,arr2字符数组所在的内存空间后面存储的内容并不知道,不遇到 '\0' 拷贝就不会停止,这就会导致越界访问,程序就会出现问题。原创 2024-04-29 20:30:12 · 1233 阅读 · 0 评论 -
strlen函数详解
上述代码中,我们首先声明一个字符数组str并使用字符串常量进行初始化。然后,使用strlen函数计算字符串的长度,并将结果打印输出。原创 2024-04-29 19:52:20 · 823 阅读 · 0 评论 -
掘根宝典之c语言动态内存(malloc(),realloc(),calloc(),free(),动态内存易错点)
C语言引入动态内存的主要目的是为了提供灵活性和效率。灵活性:动态内存分配允许程序在运行时根据需要动态地分配内存空间。这使得程序可以根据实际情况来申请和释放内存,避免了静态内存分配的限制。例如,当需要存储不确定数量的数据时,动态内存分配可以方便地根据实际需要分配合适的内存空间。效率:动态内存分配允许程序按需分配内存,避免了静态内存分配可能造成的内存空间浪费。此外,动态内存分配还可以避免栈溢出等问题,因为动态分配的内存空间位于堆中,而不是栈中。此外,动态内存分配还可以减少对大量静态数组的占用,从而提高程序的内存原创 2024-03-04 20:23:49 · 1231 阅读 · 0 评论 -
掘根宝典之C语言assert断言
在C语言中,是一个宏定义,用于进行断言检查。它的定义如下:宏接受一个表达式作为参数,并在表达式为假时触发断言失败。如果表达式为真,则不会产生任何操作。当断言失败时,函数会被调用,并输出错误信息,包括文件名、行号、函数名和断言失败的表达式。宏通常用于调试阶段,用于验证程序中的假设是否成立。如果断言失败,表明程序中存在错误,可以通过断言失败的位置来进行调试。需要注意的是,宏在编译时可以通过定义宏来禁用,这样所有的断言检查将被移除。在发布版本中,通常会禁用断言以提高程序的性能。assert.h 头⽂件定义了原创 2024-03-07 13:35:26 · 460 阅读 · 1 评论 -
C语言联合和枚举
C语言中的联合(Union)是一种特殊的数据类型,它允许在同一块内存空间中存储不同类型的数据。联合与结构体类似,但不同的是,在给联合变量赋值时,它只能存储最后一次赋值的值。在C语言中,可以使用 关键字来创建联合。 联合的定义语法如下:其中, 是联合的名称,、 等是联合的成员变量的数据类型,、 等是联合的成员变量的名称。下面是一个例子,演示如何创建联合:在这个例子中,我们定义了一个名为 的联合,它有三个成员变量:一个整型变量 ,一个浮点型变量 ,一个字符数组 。在 函数中,我们创建了一个原创 2024-03-06 17:26:17 · 1069 阅读 · 0 评论 -
掘根宝典之C语言和C++中的const
如果const位于星号*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于星号*的右侧,const就是修饰指针本身,即指针本身是常量。原创 2024-03-06 17:26:39 · 968 阅读 · 0 评论 -
掘根宝典之C语言文件操作(保姆级教程)
磁盘(硬盘)上的⽂件是⽂件。但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类 的)。函数名功能适⽤于fgetc字符输⼊函数所有输⼊流fputc字符输出函数所有输出流fgets⽂本⾏输⼊函数所有输⼊流fputs⽂本⾏输出函数所有输出流fscanf格式化输⼊函数所有输⼊流fprintf格式化输出函数所有输出流fread⼆进制输⼊⽂件fwrite⼆进制输出⽂件。原创 2024-03-06 15:03:10 · 784 阅读 · 0 评论 -
掘根宝典之C语言函数
C语言函数定义是指在函数声明的基础上,给出函数的具体实现的过程。返回类型 函数名称(参数类型1 参数名称1, 参数类型2 参数名称2, ...){ // 函数体// 函数内部的具体实现return 返回值;其中,返回类型是函数的返回值类型,可以是整型、浮点型、字符型、指针等;函数名称是为了在其他地方调用函数时使用;参数类型是函数输入的参数的类型,可以是整型、浮点型、字符型、指针等;参数名称是函数输入的参数的名称;函数体是函数的具体实现过程;return语句用于返回函数的返回值。原创 2024-03-06 13:18:17 · 618 阅读 · 0 评论 -
c语言预处理器(#define,#include,#,##,#undef,#if,#ifdef,#elif,#endif,defined函数)
格式:#define 标识符 字符串被替换的字符串在""内int main()还有需要注意的一点是,不管是在某个函数内,还是在所有函数之外(不太建议把#define写在函数内),#define作用域都是从定义开始直到整个文件结尾(这一点和typedef就区别很大)#define(宏定义)----由预处理器来处理typedef----在编译阶段由编译器处理void fun();fun();原创 2024-03-06 12:32:36 · 1081 阅读 · 0 评论 -
掘根宝典之C语言if,switch,break,continue,逻辑运算符(||,&&,!),?:运算符
C语言中的if语句用于执行给定条件下的一部分代码。if语句的语法如下:在这里,是一个表达式,如果为真,则执行语句块中的代码。如果条件为假,则跳过语句块中的代码。下面是一个使用if语句的示例:在这个示例中,如果变量的值大于0,则打印出"The number is positive."。否则,什么也不做。else语句用于在if语句的条件为假时执行特定的代码块。else必须与if配对使用以下是else语句的一般语法:在这里,如果条件为真,则执行if语句块中的代码。如果条件为假,则执行else语句原创 2024-03-05 22:39:39 · 791 阅读 · 0 评论 -
掘根宝典之C语言位字段
C语言中的位字段是一种数据结构,用来存储和操作以位为单位的数据。它允许将几个不同变量压缩到同一个字节中,并且可以使用位操作来访问和修改这些变量的值。位字段是一个signed int或unsigned int类型变量中的一组相邻的位(C99和C11新增了_Bool类型的位字段)。位字段通常使用结构体来定义,在结构体中的每个成员都被声明为特定的位数。使用位字段可以有效地节省内存空间,特别是当需要存储多个布尔值或枚举类型时。下面就是一个位字段// 5位用于存储日// 4位用于存储月。原创 2024-03-05 16:47:14 · 861 阅读 · 3 评论 -
掘根宝典之C语言基本运算符(+-*/,%,++,——,sizeof),表达式,语句,类型转换
C语言中的算术运算符包括赋值运算符(=),加法运算符(+)、减法运算符(-)、乘法运算符(*)、除法运算符(/)和取模运算符(%)。这些运算符用于对数值进行基本的加、减、乘、除和取余运算。原创 2024-03-04 19:25:00 · 1223 阅读 · 0 评论 -
掘根宝典之C语言结构体(保姆级教程)
在C语言中,结构体(structure)是一种用户自定义的数据类型,用于存储不同类型的数据项。可以将结构体视为一个包含多个成员(member)的容器,每个成员可以是不同的数据类型,如整数、浮点数、字符、数组等。原创 2024-03-03 23:51:59 · 777 阅读 · 1 评论 -
掘根宝典之c语言字符指针,指针数组,数组指针,函数指针
在示例中,使用(*ptr)[index]的方式访问数组元素,其中index表示要访问的元素的下标。需要注意的是,当数组作为函数参数传递时,实际上传递的是数组的指针(首地址),而不是整个数组。字符指针的初始化:在定义字符指针时,可以直接赋值一个字符串常量,也可以通过动态内存分配来初始化指针。数组指针在C语言中是一个灵活而强大的工具,可以用来处理数组和多维数组的访问和操作。字符指针的比较是基于内存地址的,指向内存地址较低的字符指针比较小。表示获取整个数组的地址,返回的是指向整个数组的指针。原创 2024-03-03 13:50:32 · 1265 阅读 · 0 评论 -
掘根宝典之C语言指针详解
C语言中的指针是一个变量,用于存储另一个变量的内存地址。通过指针,可以间接访问和修改变量的值。我们口语中的指针是指的是指针变量,指针变量的值是个地址指针变量的声明需要指定所指向的变量类型,例如int、char等。指针变量所指向的变量类型 *指针变量名;*和指针名之间的空格可有可无与指针相关的运算符通过取址操作符&,可以获得变量的内存地址。例如,对于一个整型变量x,可以通过&x表示其内存地址。解引用操作符**指针名代表该指针指向的地址比如 int*a=&b;*a就代表变量b的地址指针类型的意义。原创 2024-03-02 23:20:22 · 930 阅读 · 2 评论 -
掘根宝典之c语言一维数组,二维数组
例如,如果一个数组的大小为5,有效的索引范围是0到4。如果访问超出范围的索引,就会发生越界访问错误。原创 2024-03-02 18:13:01 · 767 阅读 · 0 评论 -
strcat,strncat函数详解
如果num大于字符串src的长度,那么仅将src全部追加到dest的尾部;如果num小于字符串src的长度,该字符会将src的所有字符附加在dest末尾。无论哪种情况,都会在新字符串的末尾添加空字符。原创 2024-03-02 11:52:17 · 1017 阅读 · 0 评论 -
掘根宝典之C语言字符串输出函数(puts(),fputs())
puts函数是C语言中的一个标准库函数,用于向标准输出流(即控制台)输出字符串。它的函数原型如下:函数参数:函数返回值:puts函数会在所输出的字符串末尾自动追加一个换行符('\n'),这与printf函数不同。因此,使用puts函数输出字符串时无需手动添加换行符。示例用法:结果以上代码会在控制台输出"Hello, world!",并在末尾自动添加换行符。此外注意,gets()丢弃输入中的换行符,但是puts()在输出中添加换行符fputs函数是C语言中的一个标准库函数,用于向指定的文件流原创 2024-03-01 21:22:51 · 349 阅读 · 0 评论 -
掘根宝典之C语言字符串输入函数(gets(),fgets(),get_s())
如果一切进行顺利,该函数返回的地址与传入的第1个参数相同。原创 2024-03-01 18:11:28 · 1748 阅读 · 0 评论 -
掘根宝典之C语言字符,字符串常量,字符串数组,字符指针,字符指针与字符串数组的区别
在C语言中,字符数组和字符串数组的区别在于如何使用和表示数据。字符数组:字符数组是一个存储字符的固定长度的数组。它可以存储单个字符或一串字符,但没有自动添加字符串结束符'\0'。字符数组可以用来存储和处理任意字节的数据,不仅仅限于存储字符串。例如,可以定义一个字符数组来存储用户的输入,或者用于存储二进制数据。// 定义一个长度为10的字符数组字符串数组:字符串数组是一个数组,其中每个元素都是一个字符串。字符串是以字符数组的形式呈现,但以'\0'(空字符)作为结束符,表示字符串的结束。原创 2024-02-29 21:42:43 · 1330 阅读 · 0 评论 -
掘根宝典之C语言scanf详解
注意:原创 2024-02-28 22:58:56 · 915 阅读 · 0 评论 -
C语言printf()大全
因为相同类型可以有不同的长度,比如整型有 char(8bits)、short int(16bits)、int(32bits)和 long int(64bits),浮点型有 32bits 的单精度 float 和 64bits 的双精度 double。为了指明同一类型的不同长度,于是乎,类型长度(length)应运而生,成为格式控制字符串的一部分。a是4字节,进入printf函数中,函数只读取a的第一个字节,至于这第一个字节是左边还是右边的,这可就要看是小端存储还是大端存储了,不过机器一般是小端存储。原创 2024-02-28 17:26:04 · 1192 阅读 · 0 评论 -
掘根宝典之C语言基本数据类型详解2——浮点型常量,存储形式,后缀f/l,float,double,long double,浮点值上下溢
在C语言中,浮点数可以进行算术运算和比较运算,还可以使用一些内置的数学函数进行数值计算。但是由于浮点数的精度限制,可能存在一些舍入误差。在进行浮点数的比较时,应该使用适当的误差范围进行比较,而不是直接进行精确的相等判断。原创 2024-02-27 17:20:28 · 1266 阅读 · 0 评论 -
掘根宝典之C语言基本数据类型详解1——整型介绍,整数溢出,大小端,整型常量的存储,整型提升
int(整型):用于表示整数,例如:int a = 10;float(浮点型):用于表示小数,例如:float b = 3.14;char(字符型):用于表示单个字符,例如:char c = 'A';double(双精度浮点型):用于表示较大范围和精度的小数,例如:double d = 3.1415926;void(无类型):通常用于函数的返回值类型,表示无返回值。原创 2024-02-25 22:54:12 · 1201 阅读 · 0 评论 -
掘根宝典之C语言概述(main函数的多种写法,注释,标识符,ASCII码,转义字符)
在C语言中,转义字符是用来表示一些特殊字符的字符序列。它们以反斜杠(\)开头,并紧跟特定的字符,用于表示一些不可见的控制字符或具有特殊用途的字符。这个示例演示了如何使用转义字符来打印特定的字符或产生特定的效果。注意,转义字符本身不会在输出中显示,它们只用于控制字符的行为。这个示例展示了字符'A'的ASCII码值是65。通过打印字符和对应的ASCII值,我们可以直观地看到它们之间的关联。它的作用是将当前输出位置的光标移到当前行的开头。运行上述示例代码,你会看到进度条每隔1秒更新一次,并显示进度的百分比。原创 2024-02-25 14:23:15 · 1186 阅读 · 0 评论