关键字与数据类型

本文详细介绍了C语言的关键字使用规则,字符和编码的概念,以及C语言中的数据类型(包括整型、浮点型、布尔类型和signed/unsigned的区别),同时讨论了全局变量和局部变量的存储位置。
摘要由CSDN通过智能技术生成

1. 关键字

C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键字。
• 关键字都有特殊的意义,是保留给C语⾔使⽤的
• 程序员⾃⼰在创建标识符的时候是不能和关键字重复的
• 关键字也是不能⾃⼰创建的。
C语⾔的32个关键字如下:

auto break case char const continue default do double else enum extern
float for goto if int long register return short signed sizeof 
struct switch typedef union unsigned void volatile while

注:在C99标准中加⼊了 inlinerestrict_Bool 、 _Comploex_Imaginary 等关键字。
⼀些关键字⼤家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。
注:https://zh.cppreference.com/w/c/keyword(C语⾔关键字的全部介绍)

2. 字符与编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。
我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C语⾔中的字符就遵循了 ASCII 编码的⽅式。

ASCII 码表
参考:https://zh.cppreference.com/w/cpp/language/ascii
我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据:
• 字符A ~ Z的ASCII码值从65 ~ 90
• 字符az的ASCII码值从97122
• 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
• 数字字符0 ~ 9的ASCII码值从48 ~57
• 换⾏ \n 的ASCII值是:10
• 在这些字符中ASCII码值从0 ~ 31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
单个字符的打印可以使⽤%c来指定格式:

#include <stdio.h>
int main()
{
 printf("%c\n", 'Q');
 printf("%c\n", 81);//这⾥的81是字符Q的ASCII码值,也是可以正常打印的
 return 0;
}

3. 数据类型

C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。
数据类型

3.1 字符

char
[signed] char
unsigned char

3.2 整型

//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//⻓整型
long [int]
[signed] long [int]
unsigned long [int]
//更⻓的整型
//C99中引⼊
long long [int]
[signed] long long [int]
unsigned long long [int]

3.3 浮点型

float
double
long double

3.4 布尔类型

C 语⾔原来并没有为布尔值单独设置⼀个类型,⽽是使⽤整数 0 表⽰假,⾮零值表⽰真。在 C99 中也引⼊了 布尔类型 ,是专⻔表⽰真假的。

 _Bool

布尔类型的使⽤得包含头⽂件 <stdbool.h>
布尔类型变量的取值是:true或者false.
代码演⽰:

_Bool flag = true;
if (flag)
 printf("i like C\n");

3.5 signed 和 unsigned

C 语⾔使⽤ signedunsigned 关键字修饰字符型和整型类型的。
整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。⽐如,16位的signed short int的取值范围是:-32768 ~ 32767,最⼤是32767;⽽unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。32位的 signed int 的取值范围可以参看limits.h中给出的定义。
下⾯的定义是VS2022环境中,limits.h中相关定义。

#define SHRT_MIN      (-32768)     //有符号16位整型的最⼩值
#define SHRT_MAX        32767     //有符号16位整型的最⼤值
#define USHRT_MAX       0xffff    //⽆符号16位整型的最⼤值
#define INT_MIN       (-2147483647 - 1)     //有符号整型的最⼩值
#define INT_MAX        2147483647 //有符号整型的最⼤值

unsigned int ⾥⾯的 int 可以省略,所以上⾯的变量声明也可以写成下⾯这样。

unsigned a;

字符类型 char 也可以设置signed unsigned

signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255

注意:C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。
这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是
unsigned char
这⼀点与 int 不同, int 就是等同于 signed int

3.6 数据类型的取值范围

上述的数据类型很多,尤其数整型类型就有short、int、long、long long 四种,为什么呢?
其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类
型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值:
limits.h ⽂件中说明了整型类型的取值范围。
float.h 这个头⽂件中说明浮点型类型的取值范围。
为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤这些常量。

• SCHAR_MIN , SCHAR_MAX :signed char 的最⼩值和最⼤值。
• SHRT_MIN , SHRT_MAX :short 的最⼩值和最⼤值。
• INT_MIN , INT_MAX :int 的最⼩值和最⼤值。
• LONG_MIN , LONG_MAX :long 的最⼩值和最⼤值。
• LLONG_MIN , LLONG_MAX :long long 的最⼩值和最⼤值。
• UCHAR_MAX :unsigned char 的最⼤值。
• USHRT_MAX :unsigned short 的最⼤值。
• UINT_MAX :unsigned int 的最⼤值。
• ULONG_MAX :unsigned long 的最⼤值。
• ULLONG_MAX :unsigned long long 的最⼤值。

4. 变量

• 全局变量:在⼤括号外部定义的变量就是全局变量
全局变量的使⽤范围更⼴,整个⼯程中想使⽤,都是有办法使⽤的。
• 局部变量:在⼤括号内部定义的变量就是局部变量
局部变量的使⽤范围是⽐较局限,只能在⾃⼰所在的局部范围内使⽤的。

4.1 全局变量和局部变量在内存中存储在哪⾥呢?

⼀般我们在学习C/C++语⾔的时候,我们会关注
内存中的三个区域:栈区、堆区、静态区。

  1. 局部变量是放在内存的栈区
  2. 全局变量是放在内存的静态区
  3. 堆区是⽤来动态内存管理的
    在这里插入图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值