第三节 常量与变量
-
常量
-
变量
2.3.1 常量
说明:在程序执行时其值不能改变的量。由于本身已隐含了数据类型,所以可以不必说明而直接使用。
使用场合:初始化、使用固定的操作数等。
一、整型常量
十进制整数:以日常所用的十进制整数形式给出,如96、-54、102等。
八进制整数:以数字0开口头的数,如036、015、045等。
十六进制整数:以0x或0X开头的数,如0xa3、0XB35、0x9c8等。
二、实型常量
说明:在计算机内以浮点数形式存放的数,其值只能使用十进制表示。
(1)十进制形式:由数码、小数点、正负号组成,如3.1415、-0.12、0.001等。
(2)指数形式:由十进制数、阶码标识、阶码组成。如3.1E5、5e-9、-6.6e+4等。
注意:十进制数为实数,阶码为整数,“+”号可以省略。
三、字符常量
说明:由一对单引号括起来的单个字符,如‘a’、‘2’、‘$’、‘(’等。
意义:字符是用其对应的ASCII码值来表示的。
转义字符:在ASCII中还有一些无法用一个字符直接表示出来的码值,因此采用了转义字符表示特殊符号。
内容:
转义字符 | 意义 | 码值 |
---|---|---|
\n | 换行,光标移动到下一行行首 | 10 |
\r | 回车,光标移动到本行行首 | 13 |
\t | 水平制表符,以8格为单位可将光标移动到下一个Tab位置 | 9 |
\0 | 空字符,作为字符串的结束标志 | 0 |
\' | 输出单引号 ‘ | 39 |
\" | 输出双引号 ” | 34 |
\\ | 输出反斜杠 \ | 92 |
\? | 输出问号 ? | 63 |
\a | 响铃,发出声音 | 7 |
\b | 退格,光标移动到前一个字符位置 | 8 |
\f | 换页,不影响显示结果,但会影响打印机输出 | 12 |
\v | 垂直制表,不影响显示结果,但会影响打印机输出 | 11 |
\o、\oo | 输出八进制与之对应的ASCII字符 | |
\xh或\xhh | 输出十六进制与之对应的ASCII字符 |
运算问题:字符常量在表达式中会转变为ASCII码码值进行处理。
四、字符串常量
说明:使用一对双引号括起来的字符序列,在存储时除了一个字符占一个字节以外,还会在尾部自动加一个转义字符‘\0’作为结束标志。
示例:
“ab\'c14” //其结果为:ab'c14
“abc\b\\d\015” //其结果为:ab\d
五、符号常量
说明:采用一个标识符来表示一个常量,并用宏定义命令#define来定义。
用法:#define 标识符 常量表达式
意义:凡在程序中出现的标识符都代表直接常量表达式,所以它不会另外分配内存。
【程序现场】2-3-1
#include<stdio.h> #define N 10 #define M N*10.5 #define fun(x,y) x+y int main(void) { printf("%d,%d,%d\n",96,-52,0); printf("%d,%d,%d\n",036,-015,045); printf("%d,%d,%d\n",0xa6,-0x15,0XB1); printf("\n"); printf("%f,%f,%f\n",3.14,-0.12,0.123456789); //注意:输出时会有四舍五入问题 printf("%f,%f,%f\n",3.1E5,5e-4,-6.6e+4); printf("\n"); printf("%c,%c,%c\n",'a','\\',67); printf("%s\n","ab\'c14\be"); printf("%s\n","abc\ad\0ef"); printf("%d,%d,%f\n",N,M,M); printf("fun(x,y)=%d\n",4*fun(1,2)-3); return 0; }
2.3.2 变量
说明:指在程序的运行过程中其值可以发生变化的一种数据对象。
属性:
(1)地址:变量所在存储单元的编号。其中以存放变量的第一个存储单元的地址就是变量的地址。
(2)变量名:变量所在存储单元起始地址的助记符。
(3)变量值:存储在相应存储单元中的数据。
(4)类型:变量所属类型,其决定了变量的存储方式和操作方式。
一、变量的定义
说明:在C语言中变量一定要先定义后使用。
用法:类型 变量名表
二、 变量的初始化
说明:程序对变量预先设置初值的操作。
使用方法:在定义时,采用赋值号将数据赋值给变量(参考程序现场2-3-2)。
三、指针变量定义
说明:一个用来存放数据在内存中的地址的变量,为了与其他类型变量做区分,故在变量名前加“*”作标识。
用法:*类型 变量名
四、指针变量初始化
说明:指针变量只可以存储可访问的内存,对于直接赋予标识地址的整型常量和常量的地址是非法的。因此,一般使用已定义过的变量的地址进行初始化。
使用方法:利用取地址运算符可将变量地址取出,而数组名即表示数组首元素的首地址,因此对于数组名的操作不需要取地址运算符。
【程序现场】2-3-2
#include<stdio.h> int main(void) { int a; char b,c,d; printf("&a=%p\n",&a); printf("\n"); int A1=10,A2=12.5; char B='b',C=67; float E1=1.2,E2=0.12345678; printf("A1=%d,A2=%d\n",A1,A2); printf("B=%c,C=%c\n",B,C); printf("E1=%f,E2=%f\n",E1,E2); printf("\n"); int *p=&A1; printf("p=%p,*p=%d\n",p,*p); return 0; }