C语言基础(2)
4.3变量、常量、标识符
-
变量:可写(赋值)可读(获取,可取值);常量:只可读,不可写。
-
定义:为变量分配一块内存并给它取上一个名字。变量名一旦和这块内存匹配起来,他们就同生共死,且这块内存的位置也不能被改变。一个变量在一定的区域内(eg.函数内,全局等)只能被定义一次。
-
声明:有两重含义。1)告诉编译器,这个名字已经匹配到一块内存上了。2)告诉编译器,这个名字我先预定了,别的地方再也不能用它来作为变量名。
定义&声明的区别:定义创建了对象并为这个对象分配一块内存;声明没有分配内存空间。
4.3.1变量
变量类型:全局变量(在函数外定义)、局部变量(在函数中定义)、块变量(在{}内定义)。
4.3.2常量
C语言中常量分为以下几种:
1.字面常量
2.用#define定义的宏常量
3.用const关键字修饰的变量,称为常变量
4.枚举常量(enum)
5.字符常量和字符串常量(单引号是字符的定界符;双引号是字符串的定界符)
4.3.3标识符
标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
-
命名规则:
-
标识符由字母(大小写),数字以及下划线组成,且第一个字符必须是字母或者下划线
-
C语言中大写字母和小写字母是不一样的
-
标识符不能和已有的关键字相同
转义字符
-
转义字符以“\”开头,后跟一个或几个字符。
-
使用转义字符时需注意:
1)转义字符只能使用小写字母,否则转义字符被忽略;如‘\N’->‘N’。
2)\v 垂直制表和\f换页符对屏幕没有任何影响,只会影响打印机执行响应操作。
3)\t光标向前移动四格或八格(编译器里设置)
4)'字符里(即单引号里)使用字符串里(即双引号里)需要只要用’即可
5)?其实就是?(没有转义字符也一样,在vs2012测试通过)
- 总结:
转义字符既可以用于单个字符,也可以用于字符串,并且一个字符串中可以同时使用八进制形式和十六进制形式。
转义字符的初衷是用于ASCII编码,所以它的取值范围有限:
1)八进制形式的转义字符最多后跟三个数字,即\ddd最大取值是\177
2)十六进制形式的转义字符最多后跟两个数字,即\xdd最大取值是\x7f
单引号、双引号、反斜杠是特殊的字符,不能直接表示:
1)单引号是字符类型的开头和结尾,要使用 \ ’ 表示
2)双引号是字符串的开头和结尾,要使用 \ ‘’ 表示
3)反斜杠是转义字符的开头,要使用 \ \ 表示
4.4关键字
C语言的关键字共有32个,根据关键字的作用,可分为数据类型关键字,控制语句关键字。
4.4.1数据类型关键字
void char short int long float double signed unsigned truct union enum typedef sizeof auto static register extern const volatile
4.4.2流程控制关键字
if else switch case default for do while return continue break goto
4.4.3C99新增(5个)
inline 用来定义一个类的内联函数,引入它的主要原因是用它代替C中表达式形式的宏定义。C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成等一系列的操作。
restrict 只用于限定指针,该关键字用于告知编译器,所有修改该指针指向内容的操作全部都是基于该指针的,即不存在其他进行修改操作的途径;这样的后果是帮助编译器进行更好的代码优化,生成更有效率的汇编代码。
**_Bool** 用于表示布尔值。
**_Complex和 _Imaginary** <complex.h>头文件中定义了complex和imaginary宏,并将它们扩展为_Complex和 _Imaginary,因此在编写新的应用程序时,应使用<stdbool.h>头文件中的complex和imaginary宏。
4.4.4 sizeof
计算类型的大小或变量的大小,也就是字节个数。
4.4.5 typedef
是在计算机编程语言中用来为复杂的声明定义简单的别名。
它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能同时出现在同一个表达式中。
4.4.6 extern
用在全局变量或函数的声明前,用来说明"此变量/函数是在别处定义的,要在此处引用"。
4.4.7 static
C语言中用来修饰变量和函数。
4.4.8 const
是定义只读变量的关键字,或者说是定义常变量的关键字。可以修饰变量、数组、指针等。(可读,不可写)
无论是全局变量还是局部变量都必须初始化赋值。