专业的大连网站建设,系统开发,大连工业大学继续教育学院,出售域名的网站目录
1. 变量
1.1 变量的分类
1.1.1 局部变量
1.1.2 全局变量
1.2 变量的使用——声明、赋值、初始化
1.3 变量的作用域和生命周期
1.3.1 作用域
1.3.2 生命周期
2. 常量
2.1 字面常量
2.2 常变量#xff08;const常量#xff09;
2.3 简单的宏#xff08;对象式…目录
1. 变量
1.1 变量的分类
1.1.1 局部变量
1.1.2 全局变量
1.2 变量的使用——声明、赋值、初始化
1.3 变量的作用域和生命周期
1.3.1 作用域
1.3.2 生命周期
2. 常量
2.1 字面常量
2.2 常变量const常量
2.3 简单的宏对象式宏
2.4 枚举常量 1. 变量
大多数程序在产生输出之前往往需要执行一系列的计算因此需要在程序执行过程中有一种临时存储数据的方法。和大多数编程语言一样C语言中的这类存储单元被称为变量 variable。
1.1 变量的分类
1.1.1 局部变量
局部变量是{}内部定义的变量。局部变量不初始化默认为随机值。
1.1.2 全局变量
全局变量是{}外部定义的变量。全局变量不初始化默认为0。
当全局变量和局部变量名字相同的情况下局部优先但是建议不要将全局和局部变量的名字写成一样的。
#include stdio.hint a 100;//全局变量int main()
{int a 10;//局部变量printf(a%d\n, a);//a10return 0;
}
#include stdio.hint x 5, y 7;//全局变量void swap()
{int z;z x;x y;y z;
} int main()
{int x 3, y 8;//局部变量swap();printf(%d,%d\n, x, y);//3,8return 0;
}
上面代码输出结果为3,8。swap函数调用时用的是全局变量主函数中定义的变量只在主函数中有效因为主函数也是一个函数它与其他函数是平行关系输出语句这里考虑局部优先的原则。
1.2 变量的使用——声明、赋值、初始化
#include stdio.hint main()
{int num1;//声明num1 10;//赋值在已生成的变量中放入数值int num2 20;//初始化在生成变量的时候放入数值int a, b;//一次声明多个变量时用逗号分隔变量名a 5;//赋值b 15;//赋值//计算int sum num1 num2;int diff a - b;//输出printf(%d %d\n, sum, diff);//30 -10return 0;
}
变量在生成的时候会被放入不确定的值。因此在声明变量时除了有特别要求之外一定要为其赋初始值进行初始化。最好不要写int n;要写成int n 0;。
1.3 变量的作用域和生命周期
1.3.1 作用域
作用域scope是程序设计概念通常来说一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围。全局变量的作用域是整个工程。
1.3.2 生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
局部变量的生命周期是进入作用域生命周期开始出作用域生命周期结束。全局变量的生命周期是整个程序的生命周期。
static用来声明静态变量改变变量的生命周期
修饰局部变量→静态局部变量
static修饰局部变量的时候局部变量出了作用域不销毁。本质上static修饰局部变量的时候改变了变量的存储位置的影响了变量的生命周期生命周期变长和程序的生命周期一样。
修饰全局变量→静态全局变量
static修饰全局变量的时候全局变量的外部链接属性就变成了内部链接属性。这个全局变量只能在本源文件内使用不能在其他源文件内使用。
修饰函数→静态函数
static修饰函数的时候函数的外部链接属性就变成了内部链接属性。这个函数只能在本源文件内使用不能在其他源文件内使用。
2. 常量
2.1 字面常量
30; //数值常量——整数常量
3.14; //数值常量——浮点常量
w; //字符常量
abc;//字符串常量
2.2 常变量const常量
const修饰的变量本质是变量但是不能直接修改有常量的属性称为常变量。
const float pi 3.14f;
//float const pi 3.14f;
pi 5.14;//err
const修饰的常变量一旦创建后其值就不能再改变所以必须初始化。
const int a;//err
如果利用一个变量去初始化另外一个变量则它们是不是const都无关紧要。常变量的常量特征仅仅在执行改变常变量的操作时才会发挥作用。
int i 42;
const int ci i//ok
int j ci;//ok
2.3 简单的宏对象式宏 #define 标识符 替换列表 宏的替换列表可以包括标识符、关键字、数值常量、字符常量、字符串字面量、操作符和排列。当预处理器遇到一个宏定义时会做一个“标识符”代表“替换列表”的记录。在文件后面的内容中不管标识符在哪里出现预处理器都会用替换列表代替它。
#define MAX 100
#define STR abcdef#include stdio.hint main()
{printf(%d\n, MAX);//100int a MAX;printf(%d\n, a);//100printf(%s\n, STR);//abcdefreturn 0;
}
#define INT_PTR int*
INT_PTR a, b;//a是int*类型b是int类型
#define是宏定义仅仅是直接替换。INT_PTR a, b; 进行宏替换后代码为
int* a, b;
不是a和b都是int*类型的意思而是a是int*类型b是int类型。可以看成是如下代码
int *a, b;//a是指向int类型的指针b是int类型的变量
2.4 枚举常量 #include stdio.henum Day//星期
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};
enum Sex//性别
{MALE,FEMALE,SECRET
};
enum Color//颜色
{RED,GREEN,BLUE
};int main()
{printf(%d\n, RED);//0printf(%d\n, GREEN);//1printf(%d\n, BLUE);//2return 0;
} 以上定义的enum Day、enum Sex、enum Color 都是枚举类型。{}中的内容是枚举类型的可能取值也叫枚举常量。这些可能取值都是有值的默认从0开始依次递增1当然在定义的时候也可以赋初值。
#include stdio.henum Color//颜色
{RED 1,GREEN 2,BLUE 4
};int main()
{printf(%d\n, RED);//1printf(%d\n, GREEN);//2printf(%d\n, BLUE);//4return 0;
}