4.变量,常量 ,标识符
变量是以某标识符为名字,其数值可以改变(可读,可写)。{可读(获取,可取值),可写(赋值)}
常量其值不可改变(只可读,不可写)。
什么是声明,什么是定义?
什么是定义:所谓的定义就是为这个变量分配一块内存并给它取上一个名字
,这个名字就是我们经常所说的变量名。但注意,这个名字一旦和这块内存匹配起来,它们就同生共死,终生不离不弃
,并且这块内存的位置也不能被改变。一个变量在一定的区域内(比如函数内,全局等)只能被定义一次
,如果定义多次,编译器会提示你重复定义同一个变量或对象。
什么是声明:有两重含义,如下:
第一重含义:告诉编译器,这个名字已经匹配到一块内存上了。
第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名。
记住,定义和声明最重要的区别:定义创建了对象并为这个对象一块内存,而声明的时候是没有分配内存空间的。
4.1 变量
1.局部变量:在函数中定义的变量。
2.全局变量:在函数外定义的变量。
3. 块内变量: 只在块内有效。
#include<stdio.h>
int g_sum = 100; // 全局变量
int main()
{
float ft = 12.23f; // 局部变量
int a = 10;
{
int b =10; //块内变量,只在块内有效。
}
int g_sum = 0; // 局部变量和全局变量同名
// 一定会报错,因为全局变量是唯一的,
a = g_sum; //? 10 ,0
return 0;
}
4.2 常量
C 语言的常量分为
1. 字面常量
2. 用#define 定义的宏常量
3. 用 const 关键字修饰的变量,称为常变量
4. 枚举常量
5. 字符常量和字符串常量
#include<stdio.h>
#include<stdlib.h>
// 宏常量
#define PI 3.14 //不分配空间,预编译直接替换
const float pi=3.14; //常变量,分配空间
// 枚举常量
enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
int main()
{
//常变量
const float r = 10.25f;
r = 0;// ?--《《报错,常变量无法被修改
//变量
float s = 0.0;
const int a = 100;
enum week w = Mon;
enum { Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
s = r * r * PI;
int b = 010; 8进制
int e = 8; 10进制
int c = 0x10;16进制
int d = 0b1010;2进制
return 0;
}
注:
为什么define定义时不用加分号,因为其实define定义的宏常量在预编译是会被直接替换为变量名后边的值,如果加上分号,就会导致计算可能出现错误。
const修饰的常变量在定义时一定要初始化。
枚举变量的值只能选定义好的内容。枚举常变量只能是整形值!!!!!
字符常量和字符串常量
转义字符以反斜线""开头,后跟一个或几个字符。转义字符具有特定的含义,不同于字符原有的意义,
故称“转义”字符。
使用转义字符时需要注意下问题:
1)转义字符只能使用小写字母,否则转义字符被忽略;如’\N’➔ ‘N’。
2)\v 垂直制表和\f换页符对屏幕没有任何影响,只会影响打印机执行响应操作。
3)\t 光标向前移动四格或八格编译器里设置
4’字符里(即单引号里)使用字符串里(即双引号里)需要只要用 ’ 即可
5)? 其实就是 (没有转义字符也一样,在 vs2012 测试过)
注意 转义字符的第二种意思!!!!
总结:
转义字符既可以用于单个字符,也可以用于字符串,并且一个字符串中可以同时使用八进制形式和十六进制形式。 转义字符的初衷是用于 ASCII 编码,所以它的取值范围有限:
1.八进制形式的转义字符最多后跟三个数字,也即\ddd 最大取值是\177
2.十六进制形式的转义字符最多后跟两个数字,也即\xdd 最大取值是 \x7f 单引号、双引号、反斜杠是特殊的字符,不能直接表示:
1.单引号是字符类型的开头和结尾,要使用\’ 也即’\’’
2.双引号是字符串的开头和结尾,要使用\”表示,也即 ”abc\”123\”tulun”
3.反斜杠是转义字符的开头,要使用 \表示,也即’\’或者“tulun\1024”