C语言知识总结
- 格式:doc
- 大小:657.50 KB
- 文档页数:67
第一章概述一、C程序的基本结构例子#include <stdio.h>/*函数功能:计算两个整数相加之和入口参数:整型数据a和b返回值:整型数a和b之和*/int Add(int a, int b){return (a + b);}/*主函数*/main(){int x, y, sum = 0;printf("Input two integers:");scanf("%d%d", &x, &y); /*输入两个整型数x和y*/sum = Add(x, y); /*调用函数Add计算x和y相加之和*/ printf("sum = %d\n", sum); /*输出x和y相加之和*/}二、C程序结构1.C程序–由函数构成–必须有,且只能有一个main(主函数)–总是从main函数开始执行2.函数–由函数首部和函数体组成–函数首部指定函数名、函数参数、类型–函数体从{ 开始,到} 结束–函数内有语句3.语句–包括说明性语句、可执行语句–以;表示语句结束4.注释–可以出现在程序的任何位置–用/* 和*/ 括起来,必须成对出现5.书写格式–C语言没有行的概念,书写格式自由。
–习惯小写字母,缩进格式。
三、C程序的符号系统1、关键字(Keyword)–又称为保留字,C语言中预先规定的具有固定含义的一些单词2、标识符(Identifier)–系统预定义标识符–用户自定义标识符3、运算符(Operator)–34种,详见附录D4、分隔符(Separator)–空格、回车/换行、逗号等5、其它符号–大花括号―{‖和―}‖通常用于标识函数体或者一个语句块–―/*‖和―*/‖是程序注释所需的定界符6、数据(Data)a)变量(Variable)b)常量(Constant)三、标识符1、定义:由字母、下划线和数字组成的字符序列用于程序中的变量、符号常量、数组、函数、数据类型等操作对象的名字2、分类:(1)系统定义标识符–具有固定名字和特定含义的标识符–分为关键字和预定义标识符(2)用户定义标识符–用于对用户使用的变量、数组、函数等操作对象进行命名3、对标识符的规定(1)用户定义标识符–必须以字母或下划线“_”开头–不能含有除字母、数字和下划线“_”外的其他字符–标识符中大小写字母含义不同(2)关键字必须用小写字母。
C语言知识点完全版汇总C语言是一门广泛应用于计算机编程的高级程序设计语言。
它是由丹尼斯·里奇(Dennis Ritchie)在20世纪70年代初开发的,在过去几十年中一直被广泛使用。
下面是C语言的知识点完全版汇总。
一、基本语法1. 注释:C语言中的注释有单行注释和多行注释两种方式。
单行注释使用"//",多行注释使用"/* */"。
2. 变量和数据类型:在C语言中,需先声明再使用变量。
常用的数据类型包括int(整型)、float(浮点型)、char(字符型)等。
3. 运算符:C语言支持各种数学和逻辑运算符,如加减乘除、赋值、比较等。
二、控制流程1. 条件语句:C语言提供if-else语句和switch语句来实现根据条件执行不同的代码块。
2. 循环结构:C语言中常用的循环结构有for循环、while循环和do-while循环,用于重复执行一段代码。
3. 跳转语句:C语言提供了break语句和continue语句用于跳出循环或继续下一次循环的执行。
三、函数1. 函数定义和调用:在C语言中,函数由函数头和函数体组成。
函数头包括函数的返回类型、函数名和参数列表。
调用函数时,需提供函数名和对应的参数值。
2. 递归函数:递归函数是指在函数体内调用自身的函数。
递归函数可以解决一些需要重复执行的问题,如计算阶乘等。
四、数组和指针1. 数组:C语言中的数组是一种存储多个同类型元素的结构。
数组可以通过下标访问和修改其中的元素。
2. 指针:指针是C语言中的一个重要概念,它存储了一个变量或函数的地址。
通过指针,可以实现对内存进行直接操作。
五、字符串处理1. 字符串的定义和初始化:C语言中的字符串是字符数组,可以通过多种方式定义和初始化字符串。
2. 字符串的输入和输出:C语言提供了多个函数用于输入和输出字符串,如gets、puts、printf、scanf等。
3. 字符串的处理:C语言提供了一系列函数用于处理字符串,如字符串的拷贝、连接、比较等。
C语言知识点总结1、模块的独立程度可以由两个定性标准量度:耦合性和内聚性。
(一般来说要求模块之间的耦合度尽可能低而内聚性尽可能高)2、算法具有五个特点:有穷性,确定性,可行性,有0个或者多个输入,有一个或者多个输出。
3、C语言规定标识符只能由字母、数字、下划线3种字符组成,而且第一个字符必须为字母或者下划线。
(C语言还规定标识符不能为C语言中的关键字。
)4、按照耦合度从强到弱本别是:内容耦合、公共耦合、外部耦合、标记耦合、数据耦合、非直接耦合。
5、算法的复杂度主要包括算法的时间复杂度和空间复杂度。
所谓算法时间复杂度指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算次数;算法空间复杂度指执行这个算法所需的内存空间。
6、赋值运算符的左侧的操作数必须是一个变量,而不能是表达式或者常量。
7、C语言中只有自动变量和寄存器变量在使用时才占用内存单元。
8、在树形结构中,每一个结点只有一个前件,称为父结点;没有前件的结点只有一个称为树的根结点;每一个结点可以有多个后件,它们都称为该结点的子结点;没有后件的结点又称为叶子结点。
9、对象的基本特点:标志唯一性,分类性,封装性,多态性,模块性。
10、数据结构概念一般包括数据的逻辑结构、存储结构、及数据上的运算集合。
11、在C语言中,用单引号把一个字符或者反斜线后跟一个特定的字符括起来表示一个字符常量。
12、在C语言中操作一个字符串常量的方法有:将字符串常量放在一个字符数组之中;用字符指针指向字符串,然后通过字符指针来访问字符串储存区。
13、软件生命周期分为:软件定义、软件开发、软件运行维护3个阶段。
14、软件设计包括软件结构设计、数据设计、接口设计和过程设计。
(结构设计是定义软件系统各主要部件之间的关系;数据具设计是将分析时创建的模型转化为数据结构的定义;接口设计是描述软件内部、软件和操作形同之间及软件和人之间如何通信;过程设计则是把系统结构部件转换成软件的过程描述。
C语言各章节知识点总结C语言是一种常用的编程语言,广泛应用于操作系统、嵌入式系统、网络设备等领域。
下面是C语言各章节的知识点总结。
第一章:C语言概述1.C语言的起源和发展历史。
2.C语言的特点和优势。
3.C语言的应用领域和重要性。
4.C语言的编译过程和基本语法规则。
第二章:基本数据类型和运算符1.C语言的基本数据类型,如整型、浮点型、字符型等。
2.基本数据类型的存储范围和格式化输出。
3.C语言的运算符和运算符优先级。
4.表达式和赋值语句。
第三章:控制语句1. 条件语句,如if语句、switch语句。
2. 循环语句,如for循环、while循环、do-while循环。
3. 循环控制语句,如break语句、continue语句。
第四章:数组和指针1.数组的定义和初始化。
2.一维数组和二维数组的使用。
3.字符数组和字符串的处理。
4.指针的定义和操作。
5.数组和指针的关系。
第五章:函数1.函数的定义和调用。
2.函数的参数传递和返回值。
3.局部变量和全局变量。
4.递归函数和函数指针。
5.函数库的使用。
第六章:结构体和共用体1.结构体的定义和初始化。
2.结构体的访问和操作。
3.结构体数组和结构体指针。
4.共用体的定义和使用。
第七章:文件操作1.文件的打开和关闭。
2.文件的读写操作。
3.文件指针和文件的定位。
4.随机访问文件。
5.文件的错误处理和异常处理。
第八章:预处理和编译1.C语言的预处理指令和宏定义。
2.头文件的引用和包含。
3.条件编译和预处理器的工作过程。
4.编译和链接的过程。
第九章:动态内存管理1.动态内存分配和释放。
2. malloc函数和free函数的使用。
3.内存泄漏和内存溢出的问题。
4.堆和栈的区别和管理。
第十章:指针的高级应用1.指针数组和指向指针的指针。
2.函数指针和回调函数。
3.结构体指针和链表的操作。
4.动态内存分配和指针的应用。
第十一章:位运算和位域1.位运算的基本操作,如与、或、非、移位等。
C语⾔各章节知识点总结第⼀部分“C语⾔基础知识”知识点1、C程序的基本结构C程序是由函数构成的。
每个程序由⼀个或多个函数组成,其中必须有且仅有⼀个主函数main( )。
main函数是⼀个可执⾏C语⾔程序的⼊⼝和正常出⼝,⽽不论其在整个程序中书写的位置如何。
在C语⾔中,⼤⼩写字母是有区别的。
(例如习惯使⽤⼩写字母定义变量,⽤⼤写字母定义常量)。
C程序的注释有两种⽅法,⼀种是⾏注释,使⽤“//”;另外⼀种是块注释,使⽤“/* */”,注意“/*”与“*/”不能嵌套使⽤。
C语⾔书写较为灵活,但是提倡采⽤缩进格式进⾏程序书写,以体现语句之间的层次感。
C程序每条语句以“分号”作为结束标志。
以下⼏种情况不得使⽤分号:(1)所定义的函数名称后不得使⽤分号;(2) if…else…语句是⼀个整体,中间不能使⽤分号将其分隔开;(3)预编译命令后不能使⽤分号。
2、C程序开发步骤C语⾔在计算机上的开发过程主要由以下四个步骤组成:第⼀步:编辑。
⽣成后缀名为“.c”的源⽂件第⼆步:编译。
⽣成后缀名为“.obj”的⽬标⽂件第三步:连接。
⽣成后缀名为“.exe”的可执⾏⽂件第四步:运⾏。
3、VC++6.0开发⼯具的使⽤按下功能键Ctrl+F7编译程序;按下功能键F7连接程序;按下功能键Ctrl+F5运⾏程序;若程序在编译和连接过程中有语法错误,则按下功能键F4定位错误所在⾏并根据错误提⽰信息改正错误(原则是先解决error,再解决warning)。
4、C语⾔中标识符的命名规则标识符由字母、数字、下划线组成;规定第⼀个字符必须为字母或下划线。
标识符定义的变量名、函数名、常量名等最好做到“见名知义”;⼤⼩写代表不同含义;不能使⽤关键字;最好不要与C语⾔的库函数同名。
5、C语⾔的数据类型C语⾔的数据类型由基本类型和复杂类型构成。
其中基本数据类型包括字符型(char)、整型(int,short,long)、实型(float,double);复杂数据类型包括指针类型、数组、结构体、联合体。
C语言简单总结知识点1. 基本概念C语言的基本概念包括变量、常量、数据类型、运算符、表达式等。
在C语言中,变量用于存储数据,常量是不可更改的数据,数据类型是对变量所保存数据的类型进行定义。
C语言中的运算符包括算术运算符、关系运算符、逻辑运算符、位运算符等,用于对数据执行相应的操作。
表达式是由变量、常量和运算符组成的式子,用于计算和产生值。
2. 控制结构C语言中的控制结构包括顺序结构、选择结构和循环结构。
顺序结构是按照程序的编写顺序依次执行的结构,选择结构通过判断条件来选择执行的程序块,循环结构通过判断条件来重复执行一段程序。
常用的选择结构有if语句、switch语句,常用的循环结构有while循环、do-while循环、for循环等。
3. 函数在C语言中,函数是一段功能独立的代码块,用于完成特定的功能。
函数可以被多次调用,提高了代码的复用性和可维护性。
C语言中的函数包括标准库函数和用户自定义函数,标准库函数是C语言提供的一些常用功能函数,用户自定义函数是程序员自己编写的函数,用于完成特定的功能。
4. 数组数组是一组相同数据类型的元素组成的集合,每个元素都有一个编号,可以通过编号访问数组中的元素。
在C语言中,数组的声明和初始化需要指定数组的大小,数组的下标从0开始。
C语言中的数组可以是一维数组、多维数组、字符数组等。
5. 指针指针是一个变量,其值为另一个变量的地址。
C语言中的指针可以用于访问和操作内存中的数据,提高了程序的灵活性和效率。
指针可以指向不同类型的数据,可以进行指针运算,可以通过指针传递参数等。
6. 结构体结构体是一种用户定义的数据类型,用于将不同类型的数据组合在一起形成一个新的数据类型。
在C语言中,结构体由多个成员组成,每个成员可以是不同的数据类型。
结构体可以用于定义复杂的数据结构,提高了程序的模块化和可维护性。
7. 文件操作C语言中的文件操作主要包括文件的打开、关闭、读、写等操作。
C语言通过文件指针实现对文件的读写操作,文件指针是指向FILE类型的指针变量。
C语言中最重要的知识点总体上必须清楚的 :1)程序结构是三种 : 顺序结构、选择结构 ( 分支结构 ) 、循环结构。
2)读程序都要从 main() 入口 , 然后从最上面顺序往下读 ( 碰到循环做循环 , 碰到选择做选择) ,有且只有一个 main 函数。
3) 计算机的数据在电脑中保存是以二进制的形式 . 数据存放的位置就是他的地址 .4) bit 是位是指为 0 或者 1。
byte 是指字节 , 一个字节 = 八个位 .概念常考到的:1、编译预处理不是 C 语言的一部分,不占运行时间,不要加分号。
C 语言编译的程序称为源程序,它以 ASCII 数值存放在文本文件中。
2、 define PI 3.1415926;这个写法是错误的,一定不能出现分号。
3、每个 C语言程序中main 函数是有且只有一个。
4、在函数中不可以再定义函数。
5、算法:可以没有输入,但是一定要有输出。
6、 break 可用于循环结构和switch语句。
7、逗号运算符的级别最低,赋值的级别倒数第二。
第一章 C 语言的基础知识第一节、对 C 语言的基础认识1、 C语言编写的程序称为源程序,又称为编译单位。
2、 C 语言书写格式是自由的,每行可以写多个语句,可以写多行。
3、一个 C语言程序有且只有一个main 函数,是程序运行的起点。
第二节、熟悉 vc++1、 VC是软件,用来运行写的C语言程序。
2、每个 C 语言程序写完后,都是先编译,后链接,最后运行。
(.c---.obj---.exe )这个过程中注意.c 和 .obj文件时无法运行的,只有.exe文件才可以运行。
(常考!)第三节、标识符1、标识符(必考内容):合法的要求是由字母,数字,下划线组成。
有其它元素就错了。
并且第一个必须为字母或则是下划线。
第一个为数字就错了2、标识符分为关键字、预定义标识符、用户标识符。
关键字:不可以作为用户标识符号。
main define scanf printf都不是关键字。
c语言全部知识点总结一、基本语法1.1 数据类型C语言的数据类型包括基本数据类型和派生数据类型。
基本数据类型包括整型、浮点型、字符型和布尔型。
派生数据类型包括指针、数组、结构体和联合体。
1.2 变量在C语言中,变量用于存储数据。
变量需要声明后才能使用,并且需要指定变量的数据类型。
1.3 运算符C语言支持多种运算符,包括算术运算符、关系运算符、逻辑运算符和位运算符等。
1.4 控制语句C语言支持多种控制语句,包括条件语句、循环语句和跳转语句。
1.5 函数C语言是一种函数式语言,函数是C程序的基本构建块。
函数包括函数声明、函数定义和函数调用。
1.6 数组数组是一种派生数据类型,用于存储多个相同类型的数据。
数组可以是一维数组、多维数组或字符数组。
1.7 指针指针是一种派生数据类型,用于存储变量的地址。
指针的主要作用是进行动态内存分配和实现数据结构。
1.8 结构体和联合体结构体和联合体是C语言提供的两种复合数据类型,用于存储多个不同类型的数据。
1.9 文件操作C语言提供了一组函数,用于进行文件操作,包括打开文件、关闭文件、读写文件等。
1.10 宏定义宏定义是C语言中的一种预处理指令,用于在程序中定义常量、函数和条件编译等。
二、高级特性2.1 动态内存分配C语言通过malloc()和free()等函数实现动态内存分配,从而支持对内存的灵活管理。
2.2 递归C语言支持递归函数,允许函数调用自身。
递归通常用于解决分而治之的问题。
2.3 指针运算C语言支持指针运算,包括指针加法、指针减法和指针比较等。
指针运算通常用于实现数据结构和算法。
2.4 多线程编程C语言通过pthread库支持多线程编程,允许程序在多个线程中并发执行。
2.5 动态链接库C语言支持动态链接库,允许程序在运行时加载共享库,并调用共享库中的函数。
2.6 面向对象编程C语言可以通过结构体和函数指针实现面向对象编程,在一定程度上模拟类和对象的概念。
2.7 编译预处理C语言提供了一组预处理指令,允许程序在编译前进行文本替换、条件编译和包含文件等操作。
C语⾔基础知识总结⼤全1.⼊门程序#include <stdio.h>int main(){printf("Hello World!");return 0;}2.数据类型数据类型:1.基本数据类型:1.1. 整型:int 4个字节1.2. 字符型:char 1个字节1.3. 实型(浮点型)1.3.1.单精度型:float 4个字节1.3.2.双精度型:double 8个字节2.构造类型:2.1.枚举类型2.2.数组类型2.3.结构体类型2.4.共⽤体类型3.指针类型:4.空类型:3.格式化输出语句%d:⼗进制整数;%c:单个字符;%s:字符串;%f:6位⼩数;#include <stdio.h>int main(){int age = 18;float height = 1.85;char unit = 'm';printf("⼩明今年%d岁\n", age);printf("⼩明⾝⾼%f%c\n", height, unit);printf("⼩明现在在慕课⽹上学习IT技术\n");return 0;}4.常量值不发⽣改变的量成为常量;定义字符常量(注意后⾯没有;)#include <stdio.h>#define POCKETMONEY 10 //定义常量及常量值int main(){printf("⼩明今天⼜得到%d元零花钱\n", POCKETMONEY);return 0;}5.1.算数运算符:+,-,*,/,%,++,--;前++/--,先运算,再取值.后++/--,先取值,再运算;5.2.赋值运算符:5.3.关系运算符;5.4.逻辑运算符;5.5.三⽬运算符:表达式1 ? 表达式2 : 表达式3;6.⽔仙花数计算输出所有三位数的⽔仙花数字所谓“⽔仙花数”是指⼀个三位数,其各位数字⽴⽅和等于该数,如:153就是⼀个⽔仙花数,153=111+555+333。
C语言知识总结C语言知识总结变更记录文档说明对于文档中涉及的数据类型,如无特殊说明,均是对于32位操作系统而言的,即:sizeof(short) = 2sizeof(int) = 4sizeof(long) = 4sizeof(float) = 4sizeof(double) = 8我的邮箱:mugelin@如果有幸受到哪位的关注,文档中的错误之处请不吝赐教。
谢谢!目录第1章C语言概述 (1)1.1 C语言标识符 (1)第2章程序的灵魂—算法 (1)第3章数据类型、运算符和表达式 (1)3.1 C语言的数据类型 (2)3.2 常量与变量 (2)3.2.1 常量 (2)1 直接常量 (2)2 符号常量 (2)3.2.2 变量的声明和定义 (3)3.3 整形数据 (5)3.3.1 整形常量 (5)3.3.2 整型变量 (6)3.3.3 补码(了解) (6)1 补码的时钟原理 (6)2 原码、反码和补码的计算公式 (7)3.3.4 整形数据在内存中的存放 (7)3.3.5 整型数据的可移植性 (8)1 数据类型如何影响可移植性 (8)2 如何消除数据类型对可移植性的影响 (8)3.3.6 整型数据的溢出 (8)3.4 实型数据 (9)3.4.1 实型常量 (9)3.4.2 实型数据的分类 (9)3.4.3 实型数据在内存中的存放形式 (10)3.4.4 数据的舍入误差 (10)3.5 字符型数据 (11)3.5.1 字符常量 (11)3.5.2 转义字符 (11)3.5.3 字符变量 (12)3.5.4 字符数据在内存中的存放形式 (13)3.5.5 字符串常量 (13)3.6 各类数值型数据间的混合运算 (14)3.6.1 数据类型转换 (14)3.6.2 数据类型转换中的符号位扩展 (15)3.7 算术运算符和算术表达式 (16)3.7.1 优先级和结合性 (16)3.7.2 “==”运算符的陷阱 (17)3.7.3 自增、自减运算符 (18)3.8 逗号运算符和逗号表达式 (18)第4章输入/输出 (19)4.1 格式化输出printf (19)4.2 格式化输入scanf (20)第5章程序结构 (22)5.1 if语句 (22)5.1.1 逻辑短路 (22)5.1.2 运算符优先级对判断的影响 (22)5.2 switch语句 (23)5.3 循环控制程序 (24)第6章数组 (25)6.1 一维数组 (25)6.2 二维数组 (26)6.3 字符数组 (27)第7章指针 (28)7.1 基本概念 (28)7.1.1 指针的类型 (29)7.1.2 指针所指向的类型 (29)7.1.3 指针的值 (29)7.1.4 指针本身所占据的内存区 (30)7.2 指针的算术运算 (30)7.3 指针和数组 (30)7.3.1 数组名的含义 (30)7.3.2 数组指针和指针数组 (31)7.3.3 数组越界问题 (31)7.3.4 一维数组的指针运算 (32)7.3.5 二维数组的指针运算(重点难点) (32)7.4 函数指针和指针函数 (34)7.5 指针的指针(重点) (35)7.6 指针类型转换 (36)7.7 指针的安全问题 (37)7.7.1 类型转换相关 (37)7.7.2 用指针访问数组元素 (38)第8章函数 (38)8.1 形参和实参 (38)8.2 数组名作为函数参数 (40)8.3 函数的返回值 (40)8.4 函数的调用栈 (41)8.5 局部变量和全局变量 (43)8.6 变量的存储类别 (43)8.6.1 程序的内存区域 (43)8.6.2 动态存储和静态存储 (44)1 static变量 (44)2 register变量 (44)8.7 C主函数的标准原型 (45)8.8 可变参数 (45)第9章编译预处理 (46)9.1 宏定义中可能的隐患 (46)9.2 用良好的习惯避免宏定义的隐患 (48)第10章数据结构 (48)第11章内存相关话题 (48)11.1 字节序 (49)11.1.1 什么是字节序 (49)11.1.2 小尾序和大尾序 (49)11.1.3 理解字节序的关键 (50)11.1.4 网络序与主机序 (50)11.2 字节对齐 (51)11.2.1 什么是字节对齐 (51)11.2.2 为什么要字节对齐 (51)11.2.3 字节对齐对程序的影响 (51)11.2.4 字节对齐的原理 (52)11.2.5 设置编译器的默认对齐值 (54)11.2.6 字节对齐可能带来的隐患 (54)第12章位运算 (55)12.1 右移运算符(>>) (55)12.2 位域(位段) (56)12.2.1 位域的由来和概念 (56)12.2.2 位域的定义和位域变量的说明 (56)12.2.3 位域的存储 (57)12.2.4 位域的字节对齐 (58)12.2.5 位域的字节序 (58)第13章文件操作 (59)第1章C语言概述提要:●掌握标识符的合法格式1.1 C语言标识符变量名、函数名以及标号(就是goto XXX语句中的标识程序位置的XXX)都是标识符。
表示符的定义必须遵守如下规则:●C标识符只能由英文字母、下划线和数字组成;●C标识符的第一个字母必须是英文字母或下划线;●C标识符是区分大小写的;●C标识符不允许与保留字相同。
第2章程序的灵魂—算法提要:●掌握主要的排序算法(冒泡、快速、插入、选择)●掌握程序流程图的画法第3章数据类型、运算符和表达式提要:●掌握C语言的数据类型●了解魔鬼数字的弊端,以及程序中如何避免魔鬼数字●掌握不同进制整数相互转换的方法。
●理解声明和定义的概念,以及二者的区别●了解补码,掌握数据在内存中的存放,特别是整形数据和字符型数据●了解数据类型转换,掌握整型数据的类型转换和符号位扩展●理解补码对整型数据的符号位扩展的影响●了解数据的可移植性●理解整型数据的溢出●了解算术运算符优先级和结合性的陷阱,以及规避的方法掌握自加和自减运算3.1 C 语言的数据类型3.2 常量与变量3.2.1 常量常量按其表示方法可以分为:直接常量和符号常量。
1 直接常量也叫字面常量,就是通常所说的常量,一个确切数据,比如0,-100,10.5,‟a ‟等。
2 符号常量定义符号常量有两种方法:const int AGE=100;#define NAME “zhangsan ”数据类基本类实型字符型 枚举类单精度双精度构造类数组类结构体共用体指针类空类型整型引入符号常量有如下好处:●含义清楚:符号常量名一定能够望闻知义,这是定义常量的目的之一。
●一改全改:这是对付魔鬼数字的唯一办法。
#define常量和const常量的区别:●#define常量则是一个compile-Time概念,在程序编译预处理时就被替换,在运行时,并不实际存在,它的生命周期止于编译期;const常量是一个run-Time的概念,在程序执行阶段仍然有效。
●#define常量运行时已经不存,因此不会为其分配内存;const常量实际上定义了一个其值不能修改的变量,因此在堆栈上为其分配了空间。
●#define常量替换后被编译进程序文件的代码段,const常量存在于程序文件的数据段。
魔鬼数字:就是指在程序中使用的直接常量,它会给程序的开发和维护造成很大困难。
比如程序中需要使用圆周率,开始时取值为3.14,后来提高了精度要求,取值3.14159。
这样,如果程序中多处使用直接常量3.14,当程序规模稍大时,修改程序将会非常困难。
要么耗时费力,增加不必要的维护成本,要么修改不完全,导致计算结果不满足要求。
因此在实战中要严格避免使用魔鬼数字,强烈建议采用符号常量来代替直接常量,即使只使用一次。
这样的程序更具可读性,维护起来也更加容易。
3.2.2 变量的声明和定义从狭义上讲,声明(Declaration)用于说明每个标识符的含义,而并不需要为每个标识符预存储空间。
预留存储空间的声明称为定义(Definition)。
“声明”的作用是说明该变量是一个已在后面定义过的外部变量,仅仅是在为了"提前"引用该变量而作的"声明"而已。
从广义的角度来讲,声明可以分为“定义性声明(defining declaration)”和“引用性声明(referncing declaration)”,分别对应狭义性概念中的“定义”和“声明”。
广义的“定义”也是“声明”的概念很好理解。
声明本身就是说明了一个标识符,以便后面的程序可以引用,对于狭义的“定义”,定义时能够起到了说明标识符的作用,因此“定义”属于“声明”就不难理解了。
狭义的“定义”和“声明”只是为了区分“定义性声明”和“引用性声明”声明之间的差异,因此,习惯上常常把建立空间的声明称之为“定义”,而把不需要建立存储空间称之为“声明”。
例如:int a; 在声明的时候就已经建立了存储空间,称为“定义性声明”或“定义”。
extern int a; 在声明时不建立存储空间,变量a是在别的文件中定义的,称为“引用性声明”或“声明”。
分别在VC6.0和DEV-C++中编译和运行如下程序,结论并不相同,具体请看下面的注释。
看来定义还是声明有时与编译器的处理也有关系。
int main(){int a; //这里是定义(分配空间的声明),它不能重复出现,如果其后重复写一行int a,//在VC6.0和DEV-C++中编译均报重定义(redefinition);//如果其后写一行extern int a, 在VC6.中编译报重定义(redefinition),//而在DEV-C++中编译、运行均无问题.extern int A; //这是个声明而不是定义,声明A是一个已经定义了的外部变量//注意:声明外部变量时可以把变量类型去掉如:extern A;dosth(); //执行函数,实验时打个桩就行了}int A; //是定义,定义了A为整型的外部变量C语言中,一个程序块以“{”开始,以“}”结束,局部变量的定义必须放在其所属程序块的开始位置,前面不允许出现除变量定义之外的任何其它语句。
比如下面的程序就存在编译时错误:void main(){printf("abcd");int a = 0100; //前面有非变量定义语句printf("%d", a);}把上面的程序做如下修改,在a的定义之前和a生命截止之后分别加上“{”和“}”,形成一个程序块就可以了。
void main(){printf("abcd");{int a = 0100;printf("%d", a);}}声明和定义:●广义上讲,定义(Definition)同时也是声明(Declaration)。