本文为大一程序设计C语言期末复习自己搜刮到的遗漏点易错点等
define的用法
C语言中的#define是预处理指令,用于定义宏常量。它的语法是:
#define 宏名 宏值
在程序中出现宏名时,预处理器会把它替换为宏值。例如:
#define PI 3.14
double area=PI;
编译时,预处理器会把上面的代码替换为:
double area=3.14;
宏常量的优点是替换简单,速度快,不需要分配存储空间,但不能用于类型检查和作为函数参数使用。
字符常量

类型转换
int a=10, b=4;
double c, d;
c=(double)a/b;
d=(double)(a/b);
printf("%.2f %.2f", c, d);
//区别在于是先运算再转换,还是先转换再运算
int a=10, b=4;
double c=0.5, d, e;
d=a/b/c;
e=(double)a/b/c;
printf("%.2f %.2f", d, e);
//除法的运算顺序是从左到右
//注意类型转换后面有没有括号
运算顺序

存储类型
在C语言中,变量是对程序中数据所占内存空间的一种抽象定义,定义变量时,用户定义变量的名、变量的类型,这些都是变量的操作属性。不仅可以通过变量名访问该变量,系统还通过该标识符确定变量在内存中的位置。
在计算机中,保存变量当前值的存储单元有两类,一类是内存,另一类是CPU的寄存器。变量的存储类型关系到变量的存储位置,C语言中定义了4种存储属性,即自动变量(auto)、外部变量(extern)、静态变量(static)和寄存器变量(register),它关系到变量在内存中的存放位置,由此决定了变量的保留时间和变量的作用范围。
变量的保留时间又称为生存期,从时间角度,可将变量分为静态存储和动态存储两种情况:
(1)静态存储是指变量存储在内存的静态存储区,在编译时就分配了存储空间,在整个程序的运行期间,该变量占有固定的存储单元,程序结束后,这部分空间才释放,变量的值在整个程序中始终存在。
(2)动态存储是指变量存储在内存的动态存储区,在程序的运行过程中,只有当变量所在的函数被调用时,编译系统才临时为该变量分配一段内存单元,函数调用结束,该变量空间释放,变量的值只在函数调用期存在。
变量的作用范围又称为作用域,从空间角度,可以将变量分为全局变量和局部变量:
(1)局部变量是在一个函数或复合语句内定义的变量,它仅在函数或复合语句内有效,编译时,编译系统不为局部变量分配内存单元,而是在程序运行过程中,当局部变量所在的函数被调用时,编译系统根据需要,临时分配内存,调用结束,空间释放。
(2)全局变量是在函数之外定义的变量,其作用范围为从定义处开始到本文件结束,编译时,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定单元。
对变量的理解分为两个维度,一个时间维度,一个空间维度
时间上是关注什么时候占用空间,什么时候释放
空间上是作用范围,什么地方能用,什么地方不能用
关键字extern
外部变量,即全局变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。
如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件末尾。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量进行“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。
通常的,用extern声明外部变量,扩展程序文件中的作用域。
比如我们在另外一个文件里声明了一个变量,想在另一文件里用,同时他们是同一个程序的文件,那么就需要用extern声明一次再进行使用。
并且使用extern声明变量的时候只是做引用,不会再产生空间。
关键字static
有时候希望函数中的局部变量的值不要销毁,保留原来的值,则使用static声明全局变量
声明后变量处于内存的全局静态区
#include<stdio.h>
static a=5;
int fun()
{
a=a*2;
printf("a=%d\n",a);
return 0;
}
int main()
{
int i=0;
for(i=0;i<10;i++)
{
fun();
}
return 0;
}
输出如下
a=10
a=20
a=40
a=80
a=160
a=320
a=640
a=1280
a=2560
a=5120
这个结果的原因在于,每次a的值是接着上一次函数调用的值继续运算的,并非每次都初始化从5开始计算,这就是static的特性。
同时用static定义的变量对于其他文件是不可见的。
auto类型
函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量)都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间,这类局部变量称为自动变量。
自动变量用关键字auto进行存储类别的声明,例如声明一个自动变量:
int fun(int a)
{
auto int b,c=3;/*定义b,c为自动变量*/
}
a是函数fun()的形参,b、c是自动变量,并对c赋初值3。执行完fun()函数后,自动释放a、b、c所占的存储单元。
auto即变量只能在这一块使用,一般直接忽略
const
const声明并且初始化后不能再修改值,否则编译都过不了