首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基本魔法语言数据类型和变量(一) (C语言)

基本魔法语言数据类型和变量(一) (C语言)

作者头像
散峰而望
发布2025-12-23 12:38:07
发布2025-12-23 12:38:07
1520
举报

C语言数据类型和变量(一)

前言

任何一门编程语言的学习都始于对其基本构建块的认识。C语言中,数据类型变量无疑是最关键的两个概念。在C语言中,选择一个 int 还是 short ,是 float 还是 double ,绝非随意之举。变量也不仅仅是一个名字,它是内存地址的符号化标签,是程序与硬件交互的直接界面。

数据类型

1. 数据类型介绍

C语言提供了丰富的数据类型来描述生活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数。

所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。

如果C语言是一种魔法,那么数据类型便是魔法的基本元素,每种元素都有其独特的性质和用途。

下面盘点C语言提供的各种数据类型。

1.1 字符型

字符型就像风元素,它轻盈、灵动,专门用于传递信息和表达符号。单个字符就像一缕清风,可以是一个英文字母(如a、b、c)、数字符号(如1、2、3)、特殊符号(如@、#、%)或者是各种语言的文字符号(如汉字"风"、日文假名"あ")。当这些字符组合起来形成字符串(char数组)时,就像一段完整的咒语或是能产生实际效果的强风,可以表达更复杂的信息。

代码语言:javascript
复制
char //character,字符英文单词
[signed] char //有符号的,signed可写可不写
unsigned char //无符号的,不可省略
1.2 整型

整型就像土元素,它最基础、最坚实、最可靠。作为编程中最基础的数据类型之一,整型直接对应数学中的整数概念,不包含小数部分。

代码语言:javascript
复制
//整数 - integer,整数的英文单词

//短整型:
short [int]
[signed] short [int]
unsigned short [int]

//整型
int
[signed] int
unsigned int

//长整型
long [int]
[signed] long [int]
unsigned long [int]

long long [int]
[signed] long long [int]
unsigned long long [int]
1.3 浮点型

浮点型就像水元素,它流动、不精确,但可以表示程度和分量。用于计算距离、温度、金额等,用于处理需要小数精度的数值计算,恰如水的流动性和可塑性。

代码语言:javascript
复制
float //单精度浮点型
double //双精度浮点型
long double //精度更高的浮点型
1.4 空类型

空类型就像虚无元素,它不指向任何具体元素,但可以作为魔力的通道(函数返回值),或指向未知(指针),类似与一个能容纳任何元素但本身为空的神秘容器。

代码语言:javascript
复制
void func(...) //指定函数不返回任何值
int func(void) //指定函数不接受任何参数
void* //通用指针类型
1.5 布尔类型

布尔类型类似于规则魔法,其核心在于定义世界的二元性、确立绝对的是非界限。C语言原来并没有布尔类型,而是使用整数0表示假,非0表示真。

代码语言:javascript
复制
_Bool
 bool

_Bool是C99标准引入的基本数据类型,用于表示布尔值(true或false)。它只能存储0(false)或1(true)。使用 _Bool 需要包含<stdbool.h>头文件以启用 bool、true和false 的宏定义。bool是<stdbool.h>头文件中定义的宏,实际上是_Bool的别名。 true 和 false 也是宏,分别定义为1和0。

即使用布尔类型需要包含<stdbool.h>头文件。 布尔类型变量的取值是:true或false。

代码演示:

代码语言:javascript
复制
_Bool flag = true;
if(flag)
   printf("I like you\n");
1.6 各种数据类型的长度

每一种数据类型都有自己的长度,使用不同的数据类型,能够创建出长度不同的变量,变量长度的不同,储存的数据范围就有差异。

1.6.1 sizeof 操作符

sizeof 是一个关键字,也是操作符,专门是用来计算 sizeof 的操作符数的类型长度,单位是字节。在魔法中相当于洞察术,能够确保自己的代码既高效又稳定。

sizeof 操作符的操作数可以是类型,也可以是变量。

代码语言:javascript
复制
sizeof(类型)
sizeof 表达式

sizeof 的操作数如果是表达式时,可以省略后边的括号。 sizeof 后边的表达式是不真实参与运算的,是**根据表达式的类型来得出大小。 sizeof 的计算结果是 size_t 类型的。size_t 类型的值打印的时候使用 %zd (在有些环境中%zu=%zd)

sizeof 运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定,sizeof 是什么值。在不同的系统中,返回值的类型有可能是 unsigned int,也有可能是 unsigned long,甚至是 unsigned long long,对应的 printf()占位符分别是 %u、%lu和%llu。不利于程序的可移植性。

因此C语言提供一个解决办法,创造一个类型别名 size_t ,用来统一表示 sizeof 的返回值类型。

1.6.2 数据类型长度

不同的数据类型有不同的字节长度,不同编译器的字节长度可能不同。

代码语言:javascript
复制
#include<stdio.h>
#include<stdbool.h>
int main()
{
	printf("%zd\n", sizeof(bool));
	printf("%zd\n", sizeof(char));
	printf("%zd\n", sizeof(short));
	printf("%zd\n", sizeof(int));
	printf("%zd\n", sizeof(long));
	printf("%zd\n", sizeof(long long));
	printf("%zd\n", sizeof(float));
	printf("%zd\n", sizeof(double));
	printf("%zd\n", sizeof(long double));
		return 0;
}

这是在VS2022 X64配置下的输出:

请添加图片描述
请添加图片描述

C语言规定长度 : sizeof(long) 大于等于 sizeof(int) sizeof(long double) 大于等于 sizeof(double)

在这里插入图片描述
在这里插入图片描述
1.6.3 sizeof 中表达式不计算
请添加图片描述
请添加图片描述

因为 sizeof 不参与计算,又 s 是 short ,则 sizeof(s = num + 2) 在编译时就被替换成 sizeof(short)。short 在VS2022环境中是2字节,故打印值为2。

故 sizeof 在代码进行编译的时候,就根据表达式的类型确定了。而表达式的执行却要在程序运行期间才能执行,在编译期间已经 sizeo f处理掉了,所以在运行期间就不会执行表达式了。

2. signed和unsigned

C语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。 signed 关键字,表⽰⼀个类型带有正负号,包含负值;unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。两者相当于魔法元素的本源属性,是平衡的双极能量还是纯粹的单极能量。 对于 int 类型,默认是带有正负号的,也就是说由于这是默认情况,关键字 int 等同于 signed int 。关键字 signed 一般都省略不写,但是写了也不算错。

代码语言:javascript
复制
signed int a;
//等同于int a

int 类型也可以不带正负号,只表示非负整数。这是就必须使用关键字 unsigned 声明变量。

代码语言:javascript
复制
unsigned int a;

整数变量声明为unsigned 的好处是,同样⻓度的内存能够表示的最⼤整数值,增⼤了⼀倍。⽐如,16位的signed short int 的取值范围是:-32768~32767,最⼤是32767;而unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。32位的int 的取值范围可以参看limits.h 中给出的定义。

下⾯的定义是VS2022环境中,limits.h中相关定义。

代码语言:javascript
复制
 #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 可以省略,所以上面的变量声明也可以写成下面这样。

代码语言:javascript
复制
unsigned a;

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

代码语言:javascript
复制
signed char c;//范围为-128到127
unsigned char c;//范围为0到255

注意,对于 char 类型,是否等同于 signed char 不确定。char 为 signed char 还是 unsigned char 取决于编译器。但大部分编译器上 char = signed char(VS2022就是这样)。这一点与 int 不同。

3. 数据类型的取值

上述的数据类型很多,尤其数整型类型就有short、int、long、longlong四种,为什么呢? 其实每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间,有了丰富的类型,我们就可以在适当的场景下去选择适合的类型。如果要查看当前系统上不同数据类型的极限值: 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 :longlong 的最⼩值和最⼤值。 • UCHAR_MAX :unsigned char 的最⼤值。 • USHRT_MAX :unsigned short 的最⼤值。 • UINT_MAX :unsigned int 的最⼤值。 • ULONG_MAX :unsigned long 的最⼤值。 • ULLONG_MAX :unsigned long long 的最⼤值。

变量

1.1 变量的创建

了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的。 什么是变量呢?C语⾔中把经常变化的值称为变量,不变的值称为常量。相当于一个储存和操控元素的容器或符文,从而来储存、调用和操控数据类型。 变量创建的语法形式是这样的:

代码语言:javascript
复制
data_type name;
 |        |
 |        |
数据类型  变量名
代码语言:javascript
复制
int age; //整型变量 
char ch; //字符变量 
double weight; //浮点型变量

变量在创建的时候就给⼀个初始值,就叫初始化。

代码语言:javascript
复制
 int age = 1;
 char ch = 'x';
 double weight = 52.0;
 unsigned int height = 100;

1.2 变量的分类

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

代码语言:javascript
复制
 #include <stdio.h>

 int global = 1;//全局变量
  
 int main()
 {
  int local = 2;//局部变量
 
     printf("%d\n", local);
     printf("%d\n", global);
     return 0;
 }

当局部变量和全局变量同名的时候,局部变量优先使⽤。

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

  1. 局部变量是放在内存的栈区
  2. 全局变量是放在内存的静态区
  3. 堆区是⽤来动态内存管理的(后期会介绍)

(可能会有一些小毛病,若有发现还望指正,谢谢)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C语言数据类型和变量(一)
  • 前言
  • 数据类型
    • 1. 数据类型介绍
      • 1.1 字符型
      • 1.2 整型
      • 1.3 浮点型
      • 1.4 空类型
      • 1.5 布尔类型
      • 1.6 各种数据类型的长度
    • 2. signed和unsigned
    • 3. 数据类型的取值
  • 变量
    • 1.1 变量的创建
    • 1.2 变量的分类
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档