C语言中的常量分为以下几种:
字面常量
在c语言中的一些常量值,比如"abc"、1等都为字面常量。
const修饰的常变量
在c语言中,如果创建一个变量并赋值后,不希望接下来的代码会改变这个变量的值,就可以使用const修饰这个变量,使这个变量成为常变量。
#include<stdio.h>
int main(){
int a = 2;
a = 3;
const b = 4;
b = 5; //该行就会报错,因为const修饰的变量的值不可以被改变
return 0;
}
既然这个const修饰的变量的值不可以被改变,那我们可以在创建数组时,将const修饰的常变量当作数组的长度吗?
答案: 要看编译器支持不支持c99标准。因为在c99标准中增加了一个变长数组的概念,即在指定数组大小的时候,可以使用变量了。
#include<stdio.h>
int main(){
const len = 4;
int arr[len]; //在c99标准之前不支持,在c99标准后支持,注意变长数组不可以初始化。
return 0;
}
#define定义的标识符常量
我们可以将一些在项目中常用的并且不希望被修改的值用#define来修饰,那样当我们想要改变项目中所有这个值时,只需在定义的地方将值改变即可。并且我们要注意的是define并不是c语言中的关键字。
#include<stdio.h>
#define LEN 10
int main() {
int arr[LEN] = { 0 }; //后期如果我们想修改数组的长度,直接在#define定义的地方修改LEN的值即可
printf("%d\n", LEN);
return 0;
}
枚举常量
enum 枚举名 {枚举元素1,枚举元素2}
枚举是c语言提供的一种自定义类型的方法,枚举就是一一列举,即将变量的可能取值都列举出来。
#include<stdio.h>
//定义一个枚举类型
enum DAY {
MON = 1, TUE = 2, WED = 9, THU, FRI, SAT, SUN
};
int main() {
enum DAY day = THU; //定义了一个枚举变量,该变量类型为(enmu DAY),day的赋值只能是枚举里面列举的那些值。
printf("%d\n", day); //10, 枚举类型的首元素表示int型0,也可以重新给枚举类型里面的元素赋值,然后下一个元素表示的大小为前一个元素的大小加1
//枚举应用的一个场景
int n = 0;
scanf("%d", &n);
switch (n) {
case 1:
printf("周一\n");
break;
case TUE:
printf("周二\n");
break;
case WED:
printf("周三\n");
break;
case 10: //因为WED重新赋值为9,所以他后面的元素为9+1=10
printf("周四\n");
break;
}
}
字符串
字符串的结束标志
字符串的结束标志为'\0'字符,当字符串中有'\0'出现,就代表着字符串结束了,当函数strlen()计算字符串长度时,就是以'\0'作为结束标志,返回'\0'前的字符串长度,不会包括'\0'。但是操作符sizeof()计算字符串大小时,会将'\0'也算作一个字符计算进去。
#include<stdio.h>
int main() {
char arr1[] = "abcdef"; //会默认在字符串后加上'\0',表示字符串的结束
char arr2[] = { 'a','b','c','d','e','f' }; //不会在字符串后面加上'\0'
char arr3[] = { 'a','b','c','d','e','f','\0'};
printf("%d\n", strlen(arr1)); //结果为6,因为strlen找到'\0'就会结束
printf("%d\n", strlen("abc\0def")); //结果为3,因为strlen找到'\0'就会结束
printf("%d\n", strlen(arr2)); //结果为随机数,因为strlen要在arr2字符串后面的内存地址中找到'\0'才算结束
printf("%d\n", strlen(arr3)); // 结果为6
//注意sizeof为操作符,所以sizeof不加括号也可以使用,但是strlen()是函数,必须要加括号使用
printf("%d\n", sizeof arr1); //结果为7,因为操作符sizeof会将'\0'也计算进去
printf("%d\n", sizeof(arr2)); //结果为6, 因为arr2中只有6个字符
printf("%d\n", sizeof(arr3)); //结果为7,因为arr3中有7个字符
return 0;
}
\ddd和\xdd转义字符
\ddd中的ddd表示1~3个八进制的数字,如 '\123'表示 八进制123转换为十进制83在ASCII码中代表的字符。
\xdd中的dd表示2个十六进制的数字,如'\x43'表示十六进制43转换为十进制67在ASCII码中代表的字符。
#include<stdio.h>
int main() {
printf("%c\n", '\123'); //S
printf("%c\n", '\x43'); //C
return 0;
}
面试题
#include<string.h>
#include<stdio.h>
int main() {
printf("%d\n", strlen("c:\test\628\test.c")); //14,因为8进制的基数里面不包括9,所以\62为一个字符,8为另一个字符
return 0;
}