自动变量

作者:追风剑情 发布于:2020-1-16 19:54 分类:C

int main(void) {      //定义自动变量,auto关键字为可选。如果不显示初始化,plox的值为垃圾值。      auto int plox; } 关键字auto是存储类别说明符(storage-class specifier)。auto关键字在C++中的用法完全不同,如果编写C/C++兼容...

阅读全文>>

标签: C语言

评论(0) 浏览(11)

嵌套结构

作者:追风剑情 发布于:2020-1-16 14:08 分类:C

示例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdbool.h> #define LEN 20 const char* msgs[] = { " Thank you for the wonderful evening, ", "You certainly prove that...

阅读全文>>

标签: C语言

评论(0) 浏览(10)

结构数组

作者:追风剑情 发布于:2020-1-15 14:17 分类:C

示例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdbool.h> char* s_gets(char *st, int n); #define MAXTITL 41 /* 书名的最大长度 + 1 */ #define MAXAUTL 31 /* 作者姓名的最大长度 +...

阅读全文>>

标签: C语言

评论(0) 浏览(11)

声明结构体

作者:追风剑情 发布于:2020-1-15 10:38 分类:C

示例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdbool.h> char* s_gets(char *st, int n); #define MAXTITL 41 /* 书名的最大长度 + 1 */ #define MAXAUTL 31 /* 作者姓名的最大长度 +...

阅读全文>>

标签: C语言

评论(0) 浏览(10)

翻译单元和文件

作者:追风剑情 发布于:2020-1-14 19:11 分类:C

      你认为的多个文件在编译器中可能以一个文件出现。例如,通常在源代码(.c扩展名)中包含一个或多个头文件(.h扩展名)。头文件会依次包含其他头文件,所以会包含多个单独的物理文件。但是,C预处理实际上是用包含的头文件内容替换#include指令。所以,编译器源代码文件和所有的头文件都看成是一个包含信息的单独文件。这个文件被称为翻译单元(translation u...

阅读全文>>

标签: C语言

评论(0) 浏览(12)

多文件

作者:追风剑情 发布于:2020-1-13 20:16 分类:C

      只有当程序由多个翻译单元组成时,才体现区别内部链接和外部链接的重要性。复杂的C程序通常由多个单独的源代码文件组成。有时,这些文件可能要共享一个外部变量。C通过在一个文件中进行定义式声明,然后在其他文件中进行引用式声明来实现共享。也就是说,除了一个定义式声明外,其他声明都要使用extern关键字。而且,只有定义式声明才能初始化变量。  ...

阅读全文>>

标签: C语言

评论(0) 浏览(17)

存储类别和函数

作者:追风剑情 发布于:2020-1-12 21:38 分类:C

      函数也有存储类别,可以是外部函数(默认)或静态函数。C99新增了第3种类别——内联函数。外部函数可以被其他文件的函数访问,但是静态函数只能用于其定义所在的文件。假设一个文件中包含了以下函数原型: double gamma(double); /* 该函数默认为外部函数 */ static double beta(int, int); extern ...

阅读全文>>

标签: C语言

评论(0) 浏览(19)

存储类别说明符

作者:追风剑情 发布于:2020-1-9 21:45 分类:C

       关键字static和extern的含义取决于上下文。C语言有6个关键字作为存储类别说明符:auto、register、static、extern、_Thread_local和typedef。typedef关键字与任何内存存储无关,把它归于此类有一些语法上的原因。尤其是,在绝大多数情况下,不能在声明中使用多个存储类别说明符,所以这意味着不能使用多...

阅读全文>>

标签: C语言

评论(0) 浏览(27)

存储期

作者:追风剑情 发布于:2020-1-8 20:52 分类:C

      作用域和链接描述了标识符的可见性。存储期描述了通过这些标识符访问的对象的生存期。C对象有4种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。       如果对象具有静态存储期,那么它在程序的执行期间一直存在。文件作用域变量具有静态存储期。注意,对于文件作用域变量,关键字static表明了其链接属性,而...

阅读全文>>

标签: C语言

评论(0) 浏览(25)

链接

作者:追风剑情 发布于:2020-1-7 20:24 分类:C

      C变量有3种链接属性:外部链接、内部链接或无链接。具有块作用域、函数作用域或函数原型作用域的变量都是无链接变量。这意味着这些变量属于定义它们的块、函数或原型私有。具有文件作用域的变量可以是外部链接或内部链接。外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。 注意 正式和非正式术语 C标准用 ”内部链接的文件作用域“...

阅读全文>>

标签: C语言

评论(0) 浏览(34)

寄存器变量

作者:追风剑情 发布于:2020-1-6 19:06 分类:C

      变量通常储存在计算机内存中。如果幸运的话,寄存器变量储存在CPU的寄存器中,或者概括地说,储存在最快的可用内存中。与普通变量相比,访问和处理这些变量的速度更快。由于寄存器变量储存在寄存器而非内存中,所以无法获取寄存器变量的地址。绝大多数方面,寄存器变量和自动变量都一样。也就是说,它们都是块作用域、无链接和自动存储期。使用存储类别说明符register便可声...

阅读全文>>

标签: C语言

评论(0) 浏览(32)

块作用域的静态变量

作者:追风剑情 发布于:2019-12-30 19:17 分类:C

示例 //Visual Studio中加上这句才可以使用scanf() //否则只能使用scanf_s() #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <ctype.h> //malloc()、free() #include...

阅读全文>>

标签: C语言

评论(0) 浏览(43)

外部变量

作者:追风剑情 发布于:2019-12-29 22:07 分类:C

示例 //Visual Studio中加上这句才可以使用scanf() //否则只能使用scanf_s() #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <ctype.h> //malloc()、free() #include...

阅读全文>>

标签: C语言

评论(0) 浏览(49)

内部链接的静态变量

作者:追风剑情 发布于:2019-12-12 19:23 分类:C

示例 computer.c // 外部链接 int traveler = 1; // 内部链接 static int stayhome = 1; Main.c //Visual Studio中加上这句才可以使用scanf() //否则只能使用scanf_s() #define _CRT_SECURE_NO_WARNINGS #include...

阅读全文>>

标签: C语言

评论(0) 浏览(78)

随机数函数和静态变量

作者:追风剑情 发布于:2019-12-10 19:35 分类:C

示例 s_and_r.c文件 //next是具有内部链接的文件作用域静态变量 //其他文件中的函数无法访问next static unsigned long int next = 1; /* 种子 */ //采用ANSI C可移值的标准算法 int rand1(void) { /*生成伪随机数的魔术公式*/ next = next * 110351524...

阅读全文>>

标签: C语言

评论(0) 浏览(75)

_Atomic类型限定符

作者:追风剑情 发布于:2019-12-9 19:42 分类:C

      并发程序设计把程序执行分成可以同时执行的多个线程。这给程序设计带来了新的挑战,包括如何管理访问相同数据的不同线程。C11通过包含可选的头文件stdatomic.h和threads.h,提供了一些可选的(不是必须实现的)管理方法。值得注意的是,要通过各种宏函数来访问原子类型。当一个线程对一个原子类型的对象执行原子操作时,其他线程不能访问该对象。例如,下面的代...

阅读全文>>

标签: C语言

评论(0) 浏览(94)

restrict类型限定符

作者:追风剑情 发布于:2019-12-5 20:18 分类:C

restrict关键字允许编译器优化某部分代码以更好地支持计算。它只能用于指针,表明该指针是访问数据对象的唯一且初始的方式。 int ar[10]; int * restrict restar = (int *)malloc(10 * sizeof(int)); int * par = ar; 这里,指针restar是访问由malloc()所分配内存的唯一且初始的方式。因此,...

阅读全文>>

标签: C语言

评论(0) 浏览(164)

volatile类型限定符

作者:追风剑情 发布于:2019-12-4 19:28 分类:C

        volatile限定符告知计算机,代理(而不是变量所在的程序)可以改变该变量的值。通常,它被用于硬件地址以及在其他程序或同时运行的线程中共享数据。例如,一个地址上可能储存着当前的时钟时间,无论程序做什么,地址上的值都随时间的变化而改变。或者一个地址用于接受另一台计算机传入的信息。 volatile的语法和const一样: ...

阅读全文>>

标签: C语言

评论(0) 浏览(155)

存储类别和动态内存分配

作者:追风剑情 发布于:2019-11-28 19:47 分类:C

       存储类别和动态内存分配有何联系?我们来看一个理想化模型。可以认为程序把它可用的内存分为3部分:一部分供具有外部链接、内部链接和无链接的静态变量使用;一部分供自动变量使用;一部分供动态内存分配。        静态存储类别所用的内存数量在编译时确定,只要程序还在运行,就可以访问储存在该部分的数据...

阅读全文>>

标签: C语言

评论(0) 浏览(174)

动态内存分配和变长数组

作者:追风剑情 发布于:2019-11-27 20:07 分类:C

       变长数组(VLA)和调用malloc()在功能上有些重合。例如,两者都可用于创建在运行时确定大小的数组。不同的是,变长数组是自动存储类型。因此,程序在离开变长数组所在的块时,变长数组占用的内存空间会被自动释放,不必使用free()。另一方面,用malloc()创建的数组不必局限在一个函数内访问。例如,可以这样做:被调函数创建一个数组并返回指针,...

阅读全文>>

标签: C语言

评论(0) 浏览(173)

动态分配内存calloc()

作者:追风剑情 发布于:2019-11-26 20:46 分类:C

       和malloc()类似,在ANSI之前,calloc()也返回指向char的指针;在ANSI之后,返回指向void的指针。如果要储存不同的类型,应使用强制类型转换运算符。calloc()函数接受两个无符号整数作为参数(ANSI规定是size_t类型)。第1个参数是所需的存储单元数量,第2个参数是存储单元的大小(以字节为单位)。calloc()函...

阅读全文>>

标签: C语言

评论(0) 浏览(188)

动态分配内存malloc()和free()

作者:追风剑情 发布于:2019-11-25 19:41 分类:C

示例 //Visual Studio中加上这句才可以使用scanf() //否则只能使用scanf_s() #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <ctype.h> //malloc()、free() #include...

阅读全文>>

标签: C语言

评论(0) 浏览(183)

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号