我们指知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。...引申:C语言中,定义变量时,在定义的最前面写上typedef ,那么这个变量名就成了一种类型,即这个类型的同义词。 ...在C语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是 ((void*)0) , 在C++中,NULL实质是0。 ...C语言中,函数名作为右值时,就是这个函数的指针。 ...指针常用在C语言中,而引用,则用于诸如Java,C#等 在语言层面封装了对指针的直接操作的编程语言中。
在C语言中有着相似的理解对于函数。函数可以作为一段实现某一特定功能的代码,可以像控制x值改变y值那样进行某些传参操作。 在了解完函数的概念后,下面来了解下C语言中一般常见的两种函数。...也就是说,标准函数库是由编译器的发行厂商制作时进行添加的,每个编译器的库函数内容可能不一样,但是功能是按照C语言标准制作的,功能实现效果和方法几乎是一样的。...关于库函数的相关头文件的查询可以在C/C++官网或Cplusplus进行查询 。...https://zh.cppreference.com/w/c/header cplusplus.com/doc/ 在reference页面即可选择C library进行查看C语言库函数所在头文件信息...(之后不进行说明) 2.2.2 在另一个.c文件进行构建 首先我们现在创建一个新的.c文件并进行函数的创建 之后如果需要在另外一个.c函数中使用的话,需要用
0x0113F90C存储的内容为地址0113F924 指针变量 pp 指向 指针 p,指针 pp 内存值为 指针 p 的地址:0113F90C,形成了只想指针的指针。 ?...指针pp为指向指针p的指针 定义指针变量 C语言中,定义变量时,在变量名 前 写一个 * 星号,这个变量就变成了对应变量类型的指针变量。必要时要加( ) 来避免优先级的问题。...引申:C语言中,定义变量时,在定义的最前面写上typedef ,那么这个变量名就成了一种类型,即这个类型的同义词。...在C语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是 ((void*)0) , 在C++中,NULL实质是0。...函数与指针 函数的参数和指针 C语言中,实参传递给形参,是按值传递的,也就是说,函数中的形参是实参的拷贝份,形参和实参只是在值上面一样,而不是同一个内存数据对象。
1.前言 这次博客内容是与递归有关,递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢?接下来正⽂开始。 2. 递归的定义 递归其实是一种解决问题的方法,在C语言中,递归就是函数自己调用自己。...来看看一个简单的C语言递归代码 #include int main() { printf("hehe\n"); main();//main函数中⼜调⽤了main函数 return...在C语言中每一次函数调用,都要需要为本次函数调用在栈区申请⼀块内存空间来保存函数调用期间的各种局部变量的值,这块空间被称为运行时堆栈,或者函数栈帧。...当n大于2时就要实现前面两个数字,就要相加,然后将a和b都向后挪,也就是将b的值给a,c的值给b,然后再执行a+b,每执行一次n都要减减一下。...int Fib(int n) { int a = 1; int b = 1; int c = 1; while (n>2) { c = a + b; a = b; b = c;
目录 C语言中的正则表达式使用 C语言中的正则表达式使用 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念...正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。–来自百度百科 在c语言中,用regcomp、regexec、regfree 和regerror处理正则表达式。...处理正则表达式分三步: 编译正则表达式,regcomp; 匹配正则表达式,regexec; 释放正则表达式,regfree。...Regex:正则表达式字符串。 Cflags:是下边四个值或者是他们的或(|)运算。 REG_EXTENDED:使用POSIX扩展正则表达式语法解释的正则表达式。...原来regmatch_t数组的第一个元素是有特殊意义的:它是用来保存整个正则表达式能匹配的最大子串的起始和结束偏移量。
我们指知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。...C语言中的程序数据会按照他们定义的位置,数据的种类,修饰的关键字等因素,决定他们的生命周期特性。实质上我们程序使用的内存会被逻辑上划分为:栈区,堆区,静态数据区,代码区。...引申:C语言中,定义变量时,在定义的最前面写上typedef ,那么这个变量名就成了一种类型,即这个类型的同义词。...在C语言中,我们让指针变量赋值为NULL表示一个空指针,而C语言中,NULL实质是 ((void*)0) , 在C++中,NULL实质是0。...C语言中,函数名作为右值时,就是这个函数的指针。
在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。...在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。...C语言允许这种分解有二维数组a[3][4],可分解为三个一维数组,其数组名分别为a[0],a[1],a[2]。对这三个一维数组不需另作说明即可使用。...C语言允许用字符串的方式对数组作初始化赋值。...这是由于在C语言中规定,数组名就代表了该数组的首地址。 整个数组是以首地址开头的一块连续的内存单元。如有字符数组char c[10],在内存可表示如图4.2。
函数的种类 2.1 库函数 C语言中包含了许多种类的库函数,把一些实现特定功能的代码(如:输入输出、字符串比较、数学中的一些函数实现、申请内存等)封装成一个个函数,方便我们使用。...字符串处理库函数 string.h 数学库函数 math.h 内存分配库函数 stdlib.h 时间处理库函数 time.h 布尔库函数 stdbool.h 其他库函数 2.2 自定义函数 除了C语言提供的基本的库函数...} //函数定义 - 两个整数相加 int Add_sum(int a, int b){ return a + b; } 运行结果: 另一种写法是: 把所有的函数定义都写在一个.c文件中...= 1; while(n >= 3){ c = a + b; a = b; b = c; n--; } return...c; } 在不考虑数据超出in范围的情况下,求第n个斐波那契数列递归运行速度慢于循环。
1、结构体类型的声明 1.1结构体变量的创建和初始化 其实之前在C语言(操作符)2中,我们已经比较详细地介绍过结构体变量的创建和初始化,这里再补充一个特殊的初始化方法——...那用结构体类型 struct S2 创建的结构体变量所占的12个字节里n、c1、c2三个成员变量是存在哪些位置呢? 可以看到c2的偏移量为0,n的偏移量为4,c1的偏移量为8。...根据规则(2),VS默认对齐数是8,c1的大小为1小于默认对齐数,c1要对齐到1的整数倍的地址处,所以c1存到了第4个字节中;再看c2,c2的大小也是1小于默认对齐数,c2要对齐到1的整数倍的地址处,所以...c2存到了第5个字节中。...,c1要对齐到1的整数倍的地址处,所以c1存到了第8个字节中。
在c语言中除了像int,char,float,long,double等本身支持的、现成的类型,也有自定义类型,比如说结构体struct、联合体union、枚举enum,接下来我们详细说一下结构体类型 1...s//正常情况 { char c; int i; float f; }; struct //匿名情况 { char c; int i; float f; }; int main() {...#include struct { char c; int i; float f; }s; struct { char c; int i; float f; }* ps...struct s4 { char c1; struct s3 S; double d; }; 还是画图 c1放好之后,嵌套的结构体S应该怎么放呢?...让占用空间小的成员尽量集中在一起 比如 struct s1 { char c1; int i; char c2; }; struct s2 { char c1; char c2; int
C语言中操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。
我们平时使用的C语言类型类型主要是整数类型、浮点数类型以及指针类型,你是否想过我们该如何将一串不同类型的数据整合起来,实现封装?...事实上,C语言也提供给我们一些自定义类型,让我们可以自由的进行数据组合和使用。 结构体 结构体类型的声明 结构体是什么? 结构体是一些值的集合,这些值称为成员变量。...struct s1 { char c1; int i; char c2; }; c1的对齐数是1,vs环境下的默认对齐数是8,所以c1对应着偏移量为0的位置,i是int 类型的,占4个字节,...与8相比,较小的是4,所以对齐数为4,所以偏移量为4的位置,c2也是一个字节所以在偏移量为8的位置,整个整个结构体的偏移量为4,所以总大小必须为4的倍数,所以还要再多消耗3个比特位,所以最终结构体的大小为...struct A { int _a:2; int _b:5; int _c:10; int _d:30; }; 这里的A就是位段 那么该如何计算位段的大小呢? 位段的内存分配 》1.
前言 本篇文章将详细介绍编译过程中预编译的具体细节 在C语言的学习中部分人可能会忽视这一部分的学习,因为像VS这样相对强大的集成开发环境,我们在写好代码后只需要开始执行即可,所以部分人认为这一部分不值得我们花费时间去学习...其实不然,学习C语言预编译过程可以帮助我们更深入地了解C语言的编译过程和语法特性,提高代码编写的效率和质量,以及拓展编程技能 1、预定义符号 C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预编译阶段处理的...__FILE__:正在编译的源文件的文件名 __LINE__:文件当前的行号 __DATE__:文件被编译的日期 __TIME__:文件被编译的时间 __STDC__:如果编译器遵循 ANSI C,其值为...return 0; } 上面的代码中我们利用宏替换来实现创建不同类型的函数,type##_max中的##操作符将type和_max连接成了一个新的标识符 8、命名的约定 一般来讲函数和宏的使用语法很相似,所以语言本身没法帮我们区分二者...总结 预编译是C语言编译过程的第一阶段,在预编译阶段可以对源代码进行预处理,如宏定义、头文件包含等。通过学习预编译过程,可以更全面地理解C语言代码的编译过程。
C语⾔中提供了 break 和 continue 两个关键字,就是应⽤到循环中的。 • break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。...还是之前的0 //说明i没有被任何j整除,所以i是素数 printf("%d ", i); } return 0; } 运行结果为: 六、goto语句 C语
引言 在 C 语言中,文件操作是一个非常重要的主题。无论是保存用户数据、配置程序、还是读写日志文件,掌握文件操作都能使你的程序更加灵活和实用。...本文将带你深入了解 C 语言中的文件操作,帮助你从基础到进阶,逐步掌握文件操作的技巧。 一、基本概念 1.什么是文件 文件是操作系统中存储数据的基本单位。...本章讨论的是数据⽂件,C 语言通过文件指针与文件进行交互,进行读写操作。 2.文件的属性 文件的主要属性包括: 文件名:文件的名称。...C 语言提供了一系列函数来管理文件的打开和关闭。 1.流和标准流 流 流是数据输入和输出的抽象概念。通过流,程序可以读取数据或将数据写入文件。...C 语言的标准库提供了对流的支持,主要通过 FILE 类型和相关函数实现。 FILE *:表示文件流的指针。 标准流 标准流是预定义的文件流,通常用于处理程序的输入和输出。
但c99标准支持了变长数组创建,数组创建中元素个数可以是变量,但变长数组一旦创建数组长度(元素个数)便是确定的。变长数组不能在创建时初始化。...char arr1[] = {'a', 'b', 'c', 'd'}; char arr2[4] = {'a', 'b', 'c', 'd'}; char arr3[] = "abcd"; char arr4...[5] = {'a', 'b', 'c','d', '\0'}; printf("arr1[ ] %d\n", sizeof(arr1)); printf("arr2[4] %d\n", sizeof...C语言本身不对数组越界进行检查,数组越界时编译器也不一定会报错,所以一旦越界可能会导致严重的错误。所以需要我们在写代码时自己有意识的去检查。...回顾: 本文主要写了有关C语言数组的内容。首先先了解了一维数组的创建,初始化,使用和在内存中的储存;然后就是二维数组的创建,初始化,使用和在内存中的储存。
在c语言中像这种信息采集表形式的数据结构是通过结构体来实现的。其中姓名,年龄等信息就是结构体的成员变量,显然这些结构体的成员变量可以是不同的数据类型。...指定初始化 指示初始化方式(C99),这种方式允许不是按照成员顺序初始化。...看如下几个例子: //练习1 struct S1 { char c1; int i; char c2; }; printf("%d\n", sizeof(struct S1...));//---12 练习1的分析: 变量 变量大小 默认对齐数 对齐数 c1 1 8 1 i 4 8 4 c2 1 8 1 通过上面表格,我们可以想象到其在内存中存储的大概: //练习2 struct...S2 { char c1; char c2; int i; }; printf("%d\n", sizeof(struct S2));//---8 内存中存储: 默认对齐数的修改
C语言函数 1. 函数的概念 C语言是一种面向过程的编程语言,函数是C语言中的基本概念之一。C语言中的函数是一段被命名的、可重复利用的代码块,用于执行特定的任务或操作。...标准库和头文件 标准库(Standard Library)是指由C语言标准规定的一组函数和宏的集合,它们以头文件的形式提供给开发者使用。...C语言标准库提供了许多常用的函数和数据类型,可以帮助开发者更方便地进行编程。...返回数组:C语言不支持直接返回数组,如果需要返回数组,可以使用指针或结构体等间接返回。 (4). 数组做函数参数 在C语言中,可以将数组作为函数参数传递给函数。...和extern在C语言中主要用于控制变量和函数的作用域和链接性。
在C语言中,for语句使用最为灵活,它完全可以取代 while 语句。它的一般形式为: for(表达式1; 表达式2; 表达式3) 语句 它的执行过程如下:先求解表达式1。...for语句最简单的应用形式也是最容易理解的形式如下: 小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。...例如:for( i=0; (c=getchar())!=’ ’; i+=c ); 又如:for( ; (c=getchar())!...=’ ’ ; ) printf("%c",c); 循环的嵌套 【例6-7】循环嵌套的应用。
领取专属 10元无门槛券
手把手带您无忧上云