7872

39 分钟

#C 语言的变量与基本类型

计算机是用于计算的机器,而程序就是计算的步骤,编程语言的功能就是描述计算的步骤。因此,用于保存值的 变量 是编程中最基本的概念。

定义变量的格式为 变量类型 变量名 = 变量的初始值;,例如:

int age_of_yukari = 17; // 创建名为 age_of_yukari 的变量,类型为整数(int),初始值为 17
  • int 是变量类型,表示整数
  • age_of_yukari 是变量名
  • 17 是变量的值,这种直接写出来的值被称作 字面量(Literal)

注意,这里的 = 表示的是赋值,也就是将 age_of_yukari 的值设为 17;而不是数学上的相等。

可以同时定义多个相同类型的变量,例如:

int width = 1920, height = 1080;
  • 定义了名为 width 的变量,初始值是 1920
  • 定义了名为 1080 的变量,初始值是 1080

#变量的命名规则

变量名只能由 字母数字下划线 组成,并且不能以数字开头。

一些示例:

正确的名字错误的名字说明
age_of_yukariage-of-yukari- 不能用于变量名
ageOfYukari@geOfYuk@ri@ 不能用于变量名
cat22cat变量名不能以数字开头
_git_hubgit's_hub' 不能用于变量名

#整数类型

整数类型的变量用于保存整数值。例如 int x = 10; 定义一个名为 x 的整型变量,并将它的初始值设置位 10。

在计算机中,数据以二进制进行存储。例如 7 的二进制是 111,如果使用 16 位二进制存储则是 00000000 00000111。

计算机使用二进制存储数据,其基本单元称作 字节(byte);一个字节有 8 个二进制位。

在 C 语言中有不同长度的整数类型,例如:

  • int 是最常用的整数类型,通常为 32 位,能够存储 -21474836482147483647 之间的整数;
  • long 通常是 64 位,可以存储更大范围的整数,常在 int 范围不够时使用;
  • unsigned int 是无符号的整数类型,通常为 32 位,能存储 04294967295 之间的整数,常在明确不需要负数时使用。

示例:

unsigned int age = 18; // 年龄不可能是负数,并且也不太可能超过 4294967295

C 语言中包含以下整数类型:

类型中文名说明
int整型用于保存整数,通常为 32 位,范围在 -21474836482147483647,例如:0-1233
short短整型范围不大于 int
long长整型范围不小于 int
long long长长整型范围不小于 long
unsigned int无符号整型只能表示非负整数,通常为 32 位,范围在 04294967295,例如:01, 233
unsigned short无符号短整型范围不大于 unsigned int
unsigned long无符号长整型范围不小于 unsigned int
unsigned long long无符号长长整型范围不小于 unsigned long
signed int有符号整型等价于 int
signed short有符号短整型等价于 short
signed long有符号长整型等价于 long
signed long long有符号长长整型等价于 long long

注意,C 语言是贴近硬件的底层语言,因此 int 等基本类型的大小在不同的环境(硬件、操作系统、编译器等)上可能是不同的。

可以通过 limits.h 头文件中的宏获取整数类型的范围。

在标准库头文件 stdint.h 中定义了固定长度的正数类型。

C 语言中使用后缀来表示不同类型的整数字面量:

字面量后缀字面量类型
lLlong
llLLlong long
uUunsigned
ulULunsigned long
ullULLunsigned long long

示例:

int age_of_yukari_dec = 17; // 没有后缀,表示 int 类型的字面量 long age_of_yukari_hex = 17l; // l 或 L 后缀的整数表示 long 类型的字面量 unsigned age_of_yukari_oct = 17u; // u 或 U 后缀的整数表示 unsigned 类型的字面量

计算机使用二进制存储数据,因此一些涉及底层的开发中常常使用二进制、八进制和十六进制表示数值。
C 语言中使用 0x 前缀来表示十六进制字面量,例如:0xff0x1234abcd
C 语言中使用 0 前缀表示八进制字面量,例如:0230456

示例:

int age_of_yukari_dec = 17; // 十进制 int age_of_yukari_hex = 0x11; // 十六进制 int age_of_yukari_oct = 021; // 八进制

部分编译器(非 C 语言标准)可以使用 0b 表示二进制,例如:0b00110b1110

#字符类型

字符类型的变量用于保存字母或标点符号等单个字符。例如 char ch = 'A'; 定义一个名为 ch 的字符类型变量,并将它的初始值设为字母 A

'A' 这样使用一对单引号('')包裹的字符是一种字面量,它的值是其中包裹的字符的 ASCII 码,类型是 int 而非 char;赋值给 char 类型的变量时隐式转换为 char 类型。

C 语言中的 char 虽然被称为字符类型,但实际上只是一个字节。单个 char 类型的变量只能保存一个 ASCII 字符,而无法保存汉字。

类型中文名说明
char字符类型用于保存字符,例如 'A''@''\n'
signed char有符号字节范围在 -128127
unsigned char无符号字节范围在 0255

char 在语法和语义上既不是 signed char 也不是 unsigned char;在实现上可能有符号,也可能无符号,但仅用于保存字符,不要用于保存整数。

示例:

char ch = 'A'; // char 用于保存字符 unsigned char age = 17; // signed char 和 unsigned char 通常用于保存一个字节以内的整数

#浮点类型

浮点类型的变量用于保存小数。例如 float pi = 3.14; 定义一个名为 pi 的浮点型变量,并将它的初始值设为 3.14

和整型一样,浮点类型也有不同的长度,但是没有无符号的浮点类型。

类型中文名说明
float单精度浮点数用于保存小数,范围通常在 1.175494e-383.402823e+38,例如:0.0f3.14159f
double双精度浮点数用于保存小数,范围通常在 2.225074e-3081.797693e+308,例如:0.0f3.14159f
long double长双精度浮点数范围不小于 int

因为 C 语言是接近硬件底层的语言,因此类型的范围不是固定的,而是由架构决定的。

可以通过 float.h 头文件中的宏获取浮点类型的范围。

之所以称为浮点型,是因为在计算机存储小数的格式中,用于存储整数部分的位数和用于存储小数部分的位数是可变的,即小数点的位置是浮动的。 与之对应的,一种用于存储整数部分的位数和用于存储小数部分的位数不可变的的格式被称为定点数。

C 语言中使用后缀来表示不同类型的浮点数字面量:

字面量后缀字面量类型
fFfloat
lLlong double

示例:

float age_of_yukari = 17.0f; // f 或 F 后缀的小数表示 float 类型的字面量 double age_of_yukari_double = 17.0; // 无后缀的小数字面量是 double 类型 long double age_of_yukari_long = 17.0L; // l 或 L 后缀的小数表示 long double 类型的字面量

#布尔类型

类型中文名说明
bool布尔型用于布尔值,取值为 truefalse

C 语言中的 bool 本质上是一个整数,true1false0;并且所有非零的值均视为 true

在 C23 标准之前需要包含 stdbool.h 头文件才能直接使用 bool 类型以及 truefalse
否则,只能使用 int 类型以及 1 和 0 代替。

示例:

#include <stdbool.h> // 引入标准头文件 stdio.h bool is_sunny = true;

#空类型 void

C 语言使用 void 表示空类型,常用于表示函数没有返回值或参数;不能用于定义变量。

void x; // 错误,不能定义 void 类型的变量

#强制类型转换

通过 (类型名)值 的方式,可以将“值”强制转换为“类型名”的类型。

示例:

double pi = 3.14; int pi_int = (int)pi; // 得到 3

#常量

C 语言使用 const 表示常量,也就是不能被修改的变量。例如:

int x = 10; // 定义变量 x,值为 10 x = 20; // 将变量 x 的值修改为 20 const int y = 30; // 定义常量 y,值为 20,y 的值不能修改

创建于 2025/6/22

更新于 2025/7/24