2.2 C语言之常量

2023-12-14 21:53:13

2.2 C语言之常量

一、常量

  • 类似于1234的整数常量属于int类型。
	printf("%d\n", 1234);
  • long类型的常量以l或L结尾
	printf("%d\n", 123456789l);
	printf("%d\n", 123456789L);
  • 如果一个整数太大,以至于无法用int类型表示时,也将被当作long类型处理(存疑
  • 无符号常量以字母u或U结尾,后缀ul或UL表明是unsigned long类型
	printf("%u\t%u\t%u\t%u\n", 4294967295u, 4294967295U, 4294967295ul, 4294967295UL);
  • 浮点数常量中包含一个小数点(123.5)或一个指数(1e-2),或两者都有
	printf("%f\t%f\n", 1.235, 123.5e-2);
  • 没有后缀的浮点数常量为double类型。后缀f或F表示float类型,而后缀l或L则表示long double类型
	printf("%f\n", 1.24);
	printf("%f\n", 1.24f);
	printf("%f\n", 1.24F);
	printf("%f\n", 1.24l);
	printf("%f\n", 1.24L);
  • 整型数除了用十进制表示外,还可以用八进制或十六进制表示。带前缀0的整型常量表示它为八进制形式,前缀为0x或0X表示它为十六进制形式。例如:十进制数31可以写成八进制形式037,也可以写成十六进制形式0x1f或0X1F。八进制与十六进制的常量也可以使用后缀L表示long类型,使用后缀U表示unsigned类型。例如:0XFUL是一个unsigned long类型的常量,其值等于十进制数15
	printf("%d\n", 31);
	printf("%d\n", 037);
	printf("%d\n", 0x1f);
	printf("%d\n", 0X1F);
	printf("%d\n", 0XFUL);
	printf("%d\n", 017UL);
	printf("%o\n", 037);
	printf("%x\n", 0X1F);
  • 一个字符常量就是一个整数,写的时候将一个字符括在单引号中,如’x’。字符在机器字符集中的数值就是字符常量的值。例如,在ASCII字符集中,字符’0’的值为48,它与数值0没有关系。字符常量一般用来与其他字符比较,但也可以像其他整数一样参与数值运算。
	printf("%d\n", '0'); // 48
	printf("%d\n", 'A'); // 65
	printf("%d\n", 'a'); // 97
	printf("%d\n", '0' < 'A');
	printf("%d\n", '0' > 'A');
	printf("%d\n", '0' - 'A');
  • 还有一种字符常量比较特殊,那就是转义字符,比如’\n’,转义字符看起来像是两个字符,但只表示一个字符。另外,我们可以用’\ooo’,‘\xhh’ 这种表示任意字节大小的位模式,其中ooo代表1~3个八进制数字(0…7),hh代表一个或多个十六进制数字(0…9,a…f,A…F)
	printf("a%db\n", '\013'); // ASCII vertical tab
	printf("a%db\n", '\007'); // ASCII bell charactor
	printf("a%db\n", '\xb'); // ASCII vertical tab
	printf("a%db\n", '\x7'); // ASCII bell charactor

在这里插入图片描述

  • ANSI C语言中的全部转义字符序列如下所示:
转义字符含义转义字符含义
\a响铃符\\反斜杠
\b回退符\?问号
\f换页符\’单引号
\n换行符\"双引号
\r回车符\ooo八进制数
\t横向制表符\xhh十六进制数
\v纵向制表符
  • 字符常量’\0’表示值为0的字符,也就是空字符(null)。我们通常用’\0’的形式代替0,以强调某些表达式的字符属性,但其数字值为0。
	printf("a%db\n", '\0'); // ASCII NUT
  • 常量表达式是仅仅包含常量的表达式。比如
	#define MAXLINE 1000
	char line[MAXLINE + 1]; // 两个常量相加
  • 字符串常量,也叫字符串字面值,是用双引号括起来的0个或多个字符组成的字符序列。比如:
    “I am a string” 或 “” (空字符串) 都是字符串。双引号不是字符串的一部分,它只用于限定字符串。编译时,可以将多个字符串常量连起来。
	printf("%s\n", "a\"b\'"); // 转义字符
	printf("%s\n", "hello, world");
	printf("%s\n", "hello," " world"); // 多个字符串常量连接
  • 字符串常量的本质是一个字符数组,使用’\0’表示字符串的结尾,因此存储字符串的物理存储单元数比括在双引号中的字符数多一个。标准库函数strlen(s)可以返回字符串参数s的长度,但长度不包含’\0’。当然,我们可以设计一个strlen(s)函数
	printf("%d", strlen("hello"));
	int strlen(char s[]) {
		int l;
		l = 0;
		while (s[l] != '\0')
			l++;
		return l;
	}
   标准头文件<string.h>中声明了strlen和其他字符串函数
	#include <string.h>
	printf("%d", strlen("hello"));
  • 我们应该搞清楚字符常量和仅包含一个字符的字符串常量的区别:‘x’和"x"是不同的,前者是一个整数,其值是字母x在机器字符集中的对应的数值;后者是一个包含一个字符(x)和一个结束符’\0’的字符数组。
  • 枚举常量,是另外一种类型的常量,是一个常量整型值的列表,比如:
    enum boolean {NO, YES};
    enum months {JAN=1, FEB, MAR};
    • 在没有显式说明的情况下,enum类型中第一个枚举的值为0,第二个为1,依次类推;比如,NO的值为0,YES的值为1
    • 如果只指定了部分枚举的值,那么未指定值的枚举的值将依着最后一个指定值向后递增。比如,FEB的值为2,MAR的值为3
    • 不同枚举中的名字必须互不相同
    • 同一枚举中的不同名字可以有相同的值
	#include <stdio.h>
	enum boolean { NO, YES };
	enum months { JAN = 1, FEB, MAR };
	
	main()
	{
		printf("NO: %d\n", NO);
		printf("YES: %d\n", YES);
		printf("JAN: %d\n", JAN);
		printf("FEB: %d\n", FEB);
		printf("MAR: %d\n", MAR);
		return 0;
	}

文章来源:https://blog.csdn.net/unwrapping/article/details/134892181
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。