首先,依旧是前情提要,也是博主这段时间的学习感受。只有接触这门知识,去深入了解,去全面了解,才知道自己也就学了个九牛一毛。其实也不是不能接受,我知道C语言有难度,也知道自己只是一个初学者,但是经过网上的学习,本以为基础至少打得不错。今天在大学里上课,听了老师的课,看了系统教育的书,知道自己说自己是初学者都有些狂妄了,纯纯C语言爱好者的水平了,连门都没进去。果然只有知道事物的全貌,才有资格评价,今后我将以更谦虚的姿态来学习这门学科。
那么,进入这一次的主题-----字面常量与变量
在计算机高级语言中,数据有两种表现形式:常量与变量
先说常量与变量的概念;
一、常量:从名字上可以一窥这个概念的基础意义,恒常不变的量。即在程序运行过程中,其值不能被改变的量称为常量。
现在我们只说字面常量
常用的字面常量有以下几类:
(1)整型常量。如100、-189、0等都是整型常量。
(2)实型常量。有两种表示形式:
a. 十进制小数形式,由数字和小数点组成(也可被称作浮点型常量)。如123.678、0.567、-43.78等
b. 指数型式。如12.34e3(代表12.34×10的3次方)、-347.77e-28(代表-347.77×10的-28次方)
注意:e或E之前必须有数字,且e或E之后必须为整数。
(3)字符常量。有两种形式的字符常量:
a. 普通字符,用单撇号括起来的一个字符,如'a'、'B'、'0'、'?'等。
注意:单撇号只是界限符,字符常量只能是一个字符,不包括单撇号。且'a'、'A'是不同的字符常量。
b.转义字符(重要内容)是以反斜杠 \
开头的特殊字符序列,用于表示无法直接输入的字符(如换行、制表符等)或具有特殊含义的字符(如引号、反斜杠本身)。以下是常见的转义字符及其作用:
转义字符完整对照表
转义字符 | 名称 | 作用描述 | 示例与输出效果 |
---|---|---|---|
\' | 单引号 (Single Quote) | 输出单引号字符 ' | printf("\'"); → ' |
\" | 双引号 (Double Quote) | 输出双引号字符 " | printf("\""); → " |
\\ | 反斜线 (Backslash) | 输出反斜线字符 \ | printf("C:\\Files"); → C:\Files |
\a | 响铃 (Alert) | 触发系统响铃或闪烁提示 | printf("\a"); → 控制台响铃 |
\b | 退格 (Backspace) | 光标左移一格,覆盖前一个字符 | printf("A\bB"); → B |
\f | 换页 (Form Feed) | 打印机换页(控制台通常无效果) | 用于打印文档分页 |
\n | 换行 (Newline) | 光标移动到下一行开头 | printf("A\nB"); → A B |
\r | 回车 (Carriage Return) | 光标移动到当前行开头(覆盖行首内容) | printf("123\rAB"); → AB3 |
\t | 水平制表符 (Tab) | 光标移动到下一个制表位(通常4或8空格) | printf("A\tB"); → A B |
\v | 垂直制表符 (Vertical Tab) | 光标下移一行并保持列对齐(现代少用) | 用于早期终端对齐 |
\0 | 空字符 (Null) | 表示字符串的结束符 | char s[] = "Hello\0"; → Hello |
\ooo | 八进制ASCII码 | 输出对应八进制值的ASCII字符 | \101 → A(ASCII 65) |
\xhh | 十六进制ASCII码 | 输出对应十六进制值的ASCII字符 |
|
(4)字符串常量。用双撇号括起来的若干个字符,字符串常量通常为双撇号内的所有字符(不包括双撇号本身)。如"china"、"123"。
注意:单撇号内只能包含一个字符,而双撇号可以包含一个字符串。
(5)符号常量。通过 #define指令指定符号名称代表常量。例如:
#define PI 3.1416 // 注意行末没有分号
预编译时,符号常量(如 `PI`)会被替换为字面常量(3.1416)。
符号常量的优点:
1. 含义清晰:符号名称应“见名知义”(如PI代表圆周率),避免直接使用难以理解的数值(如 sum = 15*30*23.5*43)。
2. 便于统一修改:若程序中多次使用同一常量,修改符号常量定义即可全局生效。
注意事项:
a. 符号常量不是变量,不占用内存。
b. 需区分符号常量与变量,避免混淆。
小结:其实上面的大部分可以统称字面常量
定义:直接在代码中写出的固定值。
示例:整型:100
, -5 ;
浮点型:3.14
, -0.5 ;
字符型:'A'
, '\n' ;
字符串:"Hello World"
作用:直接表示数据的值,无需变量名。
二、变量:从名字上也同样可以一窥这个概念的基础意义,可以改变的量。即程序内存中的一块命名空间,用于在程序运行过程中保存、修改和传递值。就是在程序运行过程中,变量的值是可以改变的。
注意:变量必须先定义,后使用。在定义时指定该变量的名字和类型。一个变量应该有一个名字,以便被引用。
首先,变量分为局部变量和全局变量,在写代码的时候会有一个符号{},这个符号便是区分二者的关键。在{}里的是局部变量,反之在{}外的就是全局变量。
接下来,然我们来结合实例说明特殊的情况,也方便诸位的理解。
仔细看这一串代码
#include<stdio.h>
int main(){
int a=10;
int a=100;
return 0;
}
是的,看着很奇怪。这是一个错误的代码,因为在同一个范围内,同一变量只能出现一次,不能被重复定义。
接下来再看
include<stdio.h>
int a=100
int main(){
int a=10;
printf("a=%d\n",a);
return 0;
}
是的,这行代码也很怪。但这是一个对的代码,可能无法运行,大概是编译器的问题。结果如下:
没有显示为a=100。为什么?因为当全局变量与局部变量命名相同的情况下,局部优先,但是一般不建议全局变量与局部变量名字一样