C语言
xinxing_Star
这个作者很懒,什么都没留下…
展开
-
C语言中全局变量存放在哪个位置?
全局变量存放在静态存储区,位置是固定的。 局部变量在栈空间,栈地址是不固定的。栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。全局存储区(静态存储区原创 2020-06-04 10:04:12 · 10230 阅读 · 0 评论 -
C语言实现各类排序算法超简单
C 排序算法冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。过程演示:实例#include <stdio.h> void bubble_sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) for (j = 0; j < len - 1原创 2020-05-29 16:00:13 · 310 阅读 · 0 评论 -
C语言——命令行参数
C命令行参数执行程序时,可以从命令行传值给 C 程序。这些值被称为命令行参数,它们对程序很重要,特别是当您想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。命令行参数是使用 main() 函数参数来处理的,其中,argc是指传入参数的个数,argv[]是一个指针数组,指向传递给程序的每个参数。下面是一个简单的实例,检查命令行是否有提供参数,并根据参数执行相应的动作:#include <stdio.h>int main( int argc, char ...原创 2020-05-29 14:39:50 · 264 阅读 · 0 评论 -
C语言——内存分配
C内存管理本章将讲解 C 中的动态内存管理。C 语言为内存的分配和管理提供了几个函数。这些函数可以在<stdlib.h>头文件中找到。序号 函数和描述 1 void *calloc(int num, int size); 在内存中动态地分配 num 个长度为 size 的连续空间,并将每一个字节都初始化为 0。所以它的结果是分配了 num*size 个字节长度的内存空间,并且每个字节的值都是0。 2 void free(void *address);...原创 2020-05-29 14:33:09 · 159 阅读 · 0 评论 -
C语言——可变参数
C可变参数有时,您可能会碰到这样的情况,您希望函数带有可变数量的参数,而不是预定义数量的参数。C 语言为这种情况提供了一个解决方案,它允许您定义一个函数,能根据具体的需求接受可变数量的参数。下面的实例演示了这种函数的定义。int func(int, ... ) { . . . } int main() { func(2, 2, 3); func(3, 2, 3, 4); }请注意,函数func()最后一个参数写成省略号,即三个点号(...),省略号之前的那个参数是int,代表了要传递的可...原创 2020-05-28 15:50:04 · 136 阅读 · 0 评论 -
C语言——递归
C递归递归指的是在函数的定义中使用函数自身的方法。举个例子:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'"语法格式如下:void recursion() { statements; ... ... ... recursion(); /* 函数调用自身 */ ... ... ... } int .原创 2020-05-28 15:41:45 · 1711 阅读 · 0 评论 -
C语言——错误处理
C错误处理C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有..原创 2020-05-27 18:51:30 · 175 阅读 · 0 评论 -
C语言——强制类型转换
C强制类型转换强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用强制类型转换运算符来把值显式地从一种类型转换为另一种类型,如下所示:(type_name) expression请看下面的实例,使用强制类型转换运算符把一个整数变量除以另一个整数变量,得到一个浮点数:实例#include <stdio.h> int main() { int sum = .原创 2020-05-27 18:46:06 · 4052 阅读 · 0 评论 -
C语言——头文件
C头文件头文件是扩展名为.h的文件,包含了 C 函数声明和宏定义,被多个源文件中引用共享。有两种类型的头文件:程序员编写的头文件和编译器自带的头文件。在程序中要使用头文件,需要使用 C 预处理指令#include来引用它。前面我们已经看过stdio.h头文件,它是编译器自带的头文件。引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。A simple practice in C 或 C++ 程序...原创 2020-05-27 18:41:32 · 398 阅读 · 0 评论 -
C语言——文件的读写
C文件读写上一章我们讲解了 C 语言处理的标准输入和输出设备。本章我们将介绍 C 程序员如何创建、打开、关闭文本文件或二进制文件。一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节。C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备上的文件。本章将讲解文件管理的重要调用。打开文件您可以使用fopen( )函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型FILE的一个对象,类型FILE包含了所有用来控制流的必要的信息。下面是这...原创 2020-05-27 16:01:18 · 141 阅读 · 0 评论 -
C语言——输入 & 输出
C输入 & 输出当我们提到输入时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。标准文件C 语言把所有的设备都当作文件。所以设备(比如显示器)被处理的方式与文件相同。以下三个文件会在程序执行时自动打开,以便访问键盘和屏幕。标.原创 2020-05-27 15:51:46 · 1381 阅读 · 0 评论 -
C语言——位域
C位域如果程序的结构中包含多个开关量,只有 TRUE/FALSE 变量,如下:struct{ unsigned int widthValidated; unsigned int heightValidated;} status;这种结构需要 8 字节的内存空间,但在实际上,在每个变量中,我们只存储 0 或 1。在这种情况下,C 语言提供了一种更好的利用内存空间的方式。如果您在结构内使用这样的变量,您可以定义变量的宽度来告诉编译器,您将只使用这些字节。例如,上面的结构可以重写成:.原创 2020-05-22 15:41:35 · 106 阅读 · 0 评论 -
C语言——字符串
C字符串在 C 语言中,字符串实际上是使用null字符 '\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个 "Hello" 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 "Hello" 的字符数多一个。char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};依据数组初始化规则,您可以把上面的语句写成以下语句:char greeting[] = "...原创 2020-05-22 11:08:50 · 148 阅读 · 0 评论 -
C语言——函数指针与回调函数
函数指针函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数。函数指针可以像一般函数一样,用于调用函数、传递参数。函数指针变量的声明:typedef int (*fun_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针类型实例以下实例声明了函数指针变量 p,指向函数 max:实例#include <stdio.h> int max(int x, int y) { return x原创 2020-05-22 10:51:29 · 165 阅读 · 0 评论 -
C语言——从函数返回指针
C从函数返回指针C 指针在上一章中,我们已经了解了 C 语言中如何从函数返回数组,类似地,C 允许您从函数返回指针。为了做到这点,您必须声明一个返回指针的函数,如下所示:int * myFunction(){...}另外,C 语言不支持在调用函数时返回局部变量的地址,除非定义局部变量为static变量。现在,让我们来看下面的函数,它会生成 10 个随机数,并使用表示指针的数组名(即第一个数组元素的地址)来返回它们,具体如下:实例#include <std...原创 2020-05-22 10:31:42 · 916 阅读 · 0 评论 -
C语言——传递指针给函数
C传递指针给函数C 指针C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值:实例#include <stdio.h>#include <time.h>voidgetSeconds(unsignedlong*par);intmain(){ unsignedlongsec; getSeconds(&sec); ...原创 2020-05-22 10:25:11 · 717 阅读 · 0 评论 -
C语言——指针数组
C指针数组C 指针在我们讲解指针数组的概念之前,先让我们来看一个实例,它用到了一个由 3 个整数组成的数组:实例#include <stdio.h> const int MAX = 3; int main () { int var[] = {10, 100, 200}; int i; for (i = 0; i < MAX; i++) { printf("Value of var[%d] = %d\n", i, var[i] ); } return 0; }当上面的..原创 2020-05-22 10:08:35 · 262 阅读 · 0 评论 -
C语言——指针的算术运算
C指针的算术运算C 指针C 指针是一个用数值表示的地址。因此,您可以对指针执行算术运算。可以对指针进行四种算术运算:++、--、+、-。假设ptr是一个指向地址 1000 的整型指针,是一个 32 位的整数,让我们对该指针执行下列的算术运算:ptr++在执行完上述的运算之后,ptr将指向位置 1004,因为 ptr 每增加一次,它都将指向下一个整数位置,即当前位置往后移 4 字节。这个运算会在不影响内存位置中实际值的情况下,移动指针到下一个内存位置。如果ptr指向一个地址...原创 2020-05-21 18:57:59 · 747 阅读 · 0 评论 -
C语言——指针
C指针学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:实例#include <stdio.h> int main () { int var1; char var2.原创 2020-05-21 18:48:41 · 187 阅读 · 0 评论 -
C语言——enum(枚举)
C enum(枚举)枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。枚举语法定义格式为:enum 枚举名 {枚举元素1,枚举元素2,……};接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:#define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7这个看起来代码量就比原创 2020-05-21 16:56:37 · 449 阅读 · 0 评论 -
C语言——数组
C数组C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 numbers[0]、numbers[1]、...、numbers[99] 来代表一个个单独的变量。数组中的特定元素可以通过索引访问。所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最.原创 2020-05-21 16:45:24 · 820 阅读 · 0 评论 -
C语言——作用域规则
C作用域规则任何一种编程中,作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问。C 语言中有三个地方可以声明变量:在函数或块内部的局部变量 在所有函数外部的全局变量 在形式参数的函数参数定义中让我们来看看什么是局部变量、全局变量和形式参数。局部变量在某个函数或块的内部声明的变量称为局部变量。它们只能被该函数或该代码块内部的语句使用。局部变量在函数外部是不可知的。下面是使用局部变量的实例。在这里,所有的变量 a、b 和 c 是 main() 函数的局部变量。实例#.原创 2020-05-21 16:19:56 · 272 阅读 · 0 评论 -
C语言——函数
C函数函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数main(),所有简单的程序都可以定义其他额外的函数。您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,划分通常是根据每个函数执行一个特定的任务来进行的。函数声明告诉编译器函数的名称、返回类型和参数。函数定义提供了函数的实际主体。C 标准库提供了大量的程序可以调用的内置函数。例如,函数strcat()用来连接两个字符串,函数memcpy()用来复制内存到另一个位置...原创 2020-05-21 14:33:09 · 141 阅读 · 0 评论 -
C语言循环
C循环有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了更为复杂执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:循环类型C 语言提供了以下几种循环类型。点击链接查看每个类型的细节。循环类型 描述 while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。 for 循环 多次执行.原创 2020-05-21 14:15:08 · 135 阅读 · 0 评论 -
C语言判断
C判断判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。C 语言把任何非零和非空的值假定为true,把零或null假定为false。下面是大多数编程语言中典型的判断结构的一般形式:判断语句C 语言提供了以下类型的判断语句。点击链接查看每个语句的细节。语句 描述 if 语句 一个if 语句由一个布尔表达式后跟一个或多个语句组成。 if...else 语句 一个if 语...原创 2020-05-21 11:58:01 · 1409 阅读 · 0 评论 -
C语言运算符
C运算符运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C 语言内置了丰富的运算符,并提供了以下类型的运算符:算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符本章将逐一介绍算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符和其他运算符。算术运算符下表显示了 C 语言支持的所有算术运算符。假设变量A的值为 10,变量B的值为 20,则:运算符 描述 实例 + 把两个操作数相加 A + B 将得到 30 -...原创 2020-05-21 11:49:37 · 386 阅读 · 0 评论 -
C语言——存储类
C存储类存储类定义 C 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C 程序中可用的存储类:auto register static externauto 存储类auto存储类是所有局部变量默认的存储类。{ int mount; auto int month;}上面的实例定义了两个带有相同存储类的变量,auto 只能用在函数内,即 auto 只能修饰局部变量。register 存储类register存储...原创 2020-05-20 17:21:57 · 105 阅读 · 0 评论 -
C语言——常量
C常量常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。常量就像是常规的变量,只不过常量的值在定义后不能进行修改。整数常量整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。.转载 2020-05-20 16:28:55 · 309 阅读 · 0 评论 -
C语言——变量
C变量变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C 是大小写敏感的。基于前一章讲解的基本类型,有以下几种基本的变量类型:类型 描述 char 通常是一个字节(八位)。这是一个整数类型。 int 对机器而言,整数的最自然的大小。 float .原创 2020-05-20 15:50:58 · 477 阅读 · 0 评论 -
C语言基本数据类型
C数据类型在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。C 中的类型可分为以下几种:序号 类型与描述 1 基本类型: 它们是算术类型,包括两种类型:整数类型和浮点类型。 2 枚举类型: 它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。 3 void 类型: 类型说明符void表明没有可用的值。 4 派生类型: ...原创 2020-05-20 15:35:51 · 637 阅读 · 0 评论 -
C语言基本语法
C基本语法我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块。C 的令牌(Tokens)C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。例如,下面的 C 语句包括五个令牌:printf("Hello, World! \n");这五个令牌分别是:printf("Hello, World! \n");分号 ;在 C 程序中,分号是语句结束符。也就是说,每个语句必须以分号结束。它表明一个逻辑实体的结束。.原创 2020-05-20 15:29:09 · 214 阅读 · 0 评论 -
C语言程序结构简介
C程序结构在我们学习 C 语言的基本构建块之前,让我们先来看看一个最小的 C 程序结构,在接下来的章节中可以以此作为参考。C Hello World 实例C 程序主要包括以下部分:预处理器指令 函数 变量 语句 & 表达式 注释让我们看一段简单的代码,可以输出单词 "Hello World":实例#include <stdio.h> int main() { /* 我的第一个 C 程序 */ printf("Hello, World! \n"); re.原创 2020-05-20 15:27:58 · 319 阅读 · 0 评论