c语言中的常量

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值