目录
一、变量、常量
1.1 变量的命名
只能由字母、数字、下划线组成,不能以数字开头,变量名中区分大小写,变量名不能使用关键字。如:int 2*3//err;int 2a//err; int _2a//ok。
1.2 变量的分类
变量分为局部变量和全局变量,当局部变量和全局变量在一个地方都可以使用时,一定局部优先。
全局变量:在{ }外边定义的变量就是全局变量
局部变量:在{ }内部定义的变量就是局部变量
1.3 变量的作用域和生命周期
变量的作用域分为全局变量的作用域和局部变量的作用域,全局变量的作用域是整个工程。生命周期是指变量的创建到变量的销毁之间的时间段。因此可以说,作用域是范围,生命周期是时间。
例如,下列代码两个for循环语句都需要对局部变量int a进行定义,超出作用域会销毁,当注释掉int a = 2;时,代码报错,错误原因是出现未定义标识符a。
#include<stdio.h>
int main()
{
for(int i =0;i<=3;i++)
{
int a = 3;//局部变量
}
for (int i = 0; i <= 3; i++)
{
int a = 1;//局部变量
}
int a = 2;//如果注释掉,会出现未定义标识符a
printf("%d\n", a);
return 0;
}
1.4 常量
常量包括字面常量(20.0,3.14,100,‘a’)、const修饰的常变量、#define定义的标识符常量、枚举常量等。
1. const修饰的常变量
#include<stdio.h>
int main()
{
const int a = 10;
printf("a = %d\n", a);
a = 100;
printf("a = %d\n", a);
return 0;
}
其中,a就是const修饰的常变量,但本质上a还是一个变量,只不过从语法上加了一个限制。此时,上述程序报错,a不能被修改。const放在这里就是告诉程序a具有了常属性,不能再被修改了。
2. #define定义的标识符常量
#include<stdio.h>
#define M 100
int main()
{
printf("%d\n", M);
int a = M;
printf("%d\n", a);
int arr[M] = { 0 };
return 0
}
3. 枚举常量enum
enum是枚举关键字。
enum Color
{
RED, //0
GREEN, //1
BLUE //2
};
int mian()
{
enum Color c = RED;
return 0;
}
二、字符串和转义字符
2.1 字符串
字符串就是由双引号引起来的一串字符,是可以存放在字符数组中的。%s是打印字符串。字符串结束的标志是\0的转义字符,如图所示,对于数字arr1,我们虽然只编写了a b c三个字符,但实际上在字符串末尾隐藏了\0的转义字符,printf()库函数在打印字符串的过程中,遇到\0会自动停止。同样的,在strlen计算字符串长度时,\0是结束标志,不算字符串内容。
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abc"; //有\0
char arr2[] = {'a', 'b', 'c'}; //无\0
printf("%s\n", arr1); //abc
printf("%s\n", arr2); //abcxxxxxx
printf("%d\n", strlen(arr1)); //3
printf("%d\n", strlen(arr2)); //随机值
return 0;
}
strlen是一个库函数,求字符串长度,统计的是字符串中\0之前的字符个数。此处可与第一节的笔记sizeof区别记忆,再扩展一下,sizeof可以计算数组内有几个元素。
值得注意的是,strlen返回的类型是size_t。
2.2 转义字符
不管有没有意义,在C语言中,会把\字母当成一个转义字符,部分转义字符如下表。
\n | 换行 |
\0 | 转义字符 |
\\ | 表示一个反斜杠,防止被解释为转义序列符 |
\a | 警告字符,蜂鸣 |
\ddd | 表示1-3个八进制数字 |
\xdd | 表示2个十六进制数字 |
#include<stdio.h>
#include<string.h>
int main()
{
printf("%d\n", strlen("c:\test\111\test.c"));//13
printf("%d\n", strlen("c:\test\181\test.c"));//15
return 0;
}
例如:\130代表八进制130,转化为十进制为88,在ASCII码中对应X;
\x30转换为十进制为48,代表字符0。
更多转义字符请参考:转义序列 - cppreference.com