目录
常量与变量
变量
变量有局部变量和全局变量之分,借下面一段程序介绍。
变量的位置
#include <stdio.h>
int num1 = 10;//全局变量,定义在代码块({})之外
int main()
{
int num2 = 20;//局部变量,定义在代码块({})之内
return 0;
}
注:当局部变量和全局变量名字相同时,局部变量优先。
作用域
局部变量的作用域是变量所在的局部范围,全局变量的作用域是整个工程。
生命周期
局部变量的生命周期是:进入作用域,生命周期开始;出作用域生命周期结束(销毁)。全局变量的生命周期是:整个程序的生命周期。
常量
①字面常量
直接写出来的
②const修饰的常变量
#include <stdio.h>
int main()
{
const int num = 4;
printf("%d\n",num);
num = 8;
printf("%d\n",num);
return 0;
}
//程序运行失败,因为变量num一经const修饰,便具有了常属性,其值不再改变
上面的程序中虽然num被const修饰,具有了常属性,但本质上依然是变量。
例如,下面这种定义数组的方式是错误的。
const int n = 10;
int arr[n] = {0};
③#define定义的标识符常量
# include <stdio.h>
# define MAX 10//下面出现的所有的MAX均代表10,被称为标识符常量
int main()
{
int arr[MAX] = {0};
printf("%d\n",MAX);
return 0;
}
④枚举常量
枚举类型的定义形式为:
enum typeName{ valueName1, valueName2, valueName3, ...... };
enum是一个新的关键字,专门用来定义枚举类型,这也是它在C语言中的唯一用途。typeName是枚举类型的名字。valueName1, valueName2, valueName3, ......是每个值对应的名字的列表。注意最后的;不能少。
enum week{Mon,Tues,Wed,Thurs,Fri,Sat,Sun};
我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues ...... Sun 对应的值分别为 0、1 ...... 6。我们也可以给每个名字都指定一个值,更为简单的方法是只给第一个名字指定值。
enum week{Mon = 1,Tues,Wed,Thurs,Fri,Sat,Sun};
这样枚举值就从 1 开始递增。
字符串类型
由双引号引起的一串字符,注:字符串结束的标志是转义字符\0,计算字符串长度时不作为其中的内容。
//打印字符串
# include <stdio.h>
# include <string.h>
int main()
{
char arr1[] = "abc";//"abc":'a','b','c','0'
char arr2[] = {'a','b','c'};
printf("%s\n",arr1);//打印正确
printf("%d\n",strlen(arr1));//打印字符串arr1的长度,为3
printf("%s\n",arr2);//打印错误,'a','b','c'为单个字符应该再加一个'\0'
printf("%d\n",strlen(arr2));//打印字符串arr2的长度,为随机值,直到遇到\0
return 0;
}
ASCII码表
数据以二进制的形式在计算机中存储。
如字符a的十进制是97,字符A的十进制是165,字符\0的十进制是0
转义字符
顾名思义,转变原来的意思,如\0不再是0而是作为字符串的结束标志;\n不是n,而是换行。
\? | 在书写连续多个问号时使用,防止它们被解释为三字母词 |
\' | 表示' |
\" | 表示" |
\\ | 表示单个反斜杠\ |
\n | 换行 |
\t | 水平制表符 |
\ddd | ddd表示1-3个8进制数字 |
\xdd | dd表示2个16进制数字 |
//打印路径c:\test\32\test.c
printf("c:\\test\\32\\test.c");
//打印字符a
printf("%s\n",'a');
//打印字符'
printf("%s\n",'\'');
//打印字符串a
printf("%s\n","a");
//打印字符串"
printf("%s\n","\"");
计算c:\test\32\test.c的长度
printf("%d\n",strlen("c:\test\32\test.c"));//结果为13
//\32表示32(8)对应的十进制数作为ASCII码值所代表的字符
//32(8)=26(10),所以\32表示->