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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!