Hello 大家好!昨天我们已经用 VS2022 成功搭建了 C 语言环境,跑通了第一个 Hello World 程序。今天就正式进入 C 语言的核心基础 ——变量与数据类型。如果把程序比作 “工厂”,那变量就是工厂里的 “储物柜”,数据类型就是储物柜的 “规格”,只有选对规格、用好储物柜,才能高效存储和处理数据(比如年龄、身高、成绩等)。

这篇内容会从 “为什么需要变量” 到 “每种数据类型的实战用法”,拆解得明明白白,还会配套 VS2022 的实操步骤,新手也能跟着练!

一、先搞懂:为什么需要变量?

我们先看一个场景:如果想让程序计算 “20+30”,可以直接写

printf("20+30=%d\n", 20+30);


运行后能得到结果 50。但如果想计算 “用户输入的两个数之和”,或者 “随时修改其中一个数重新计算”,直接写固定数字就不行了 —— 这时候就需要 “变量” 来帮忙。

变量的本质:在计算机内存中开辟一块指定大小的空间,用来存储数据,并且数据可以随时修改。就像你在工厂里租了一个储物柜,用来放零件,零件可以换,但储物柜的位置和大小固定。

举个例子:用变量存储 “年龄” 和 “身高”,后续可以随时修改年龄、计算 BMI,甚至让用户自己输入数据,程序的灵活性直接拉满。

二、变量的 “身份证”:声明与初始化

要使用变量,必须先 “声明”(告诉编译器:我要一个什么规格的储物柜),最好再 “初始化”(给储物柜放初始数据)。

1. 变量声明的语法
 

数据类型 变量名;
  • 数据类型:储物柜的规格(比如 “小柜子”“大柜子”),后续详细讲。
  • 变量名:储物柜的编号(比如 “age”“height”),方便我们找到它。

2. 变量初始化的语法(2 种方式)

//方式1:声明时直接初始化(推荐)
数据类型 变量名 = 初始值;

//方式2:先声明,后初始化(不推荐,容易忘记赋值)
数据类型 变量名;
变量名 = 初始值;

初始化就是给变量赋初始值,强烈建议声明时直接初始化,避免变量存储随机的 “垃圾值”(就像新储物柜先清理干净再放东西)。

3. 变量命名规则(必须遵守,否则报错)

变量名就像储物柜的编号,不能随便起,要符合以下规则:

  • 只能包含字母(a-z、A-Z)、数字(0-9)、下划线(_)。
  • 不能以数字开头(比如123age错误,age123正确)。
  • 不能使用 C 语言的 “关键字”(比如int“float”“if” 这些系统预留的词,后续会列完整清单)。
  • 区分大小写(ageAge是两个不同的变量,建议统一用小写,比如age“height”)。

4. VS2022 实操:声明并使用变量

打开昨天创建的test.c文件,替换成以下代码,按 Ctrl+F5 运行,观察结果:
 

#include <stdio.h>
int main()
{
	//声明并初始化3个变量
	int age = 20;
	float height = 1.75f;
	char gender = 'M';

	//输出变量的值
	printf("年龄:%d\n",age);
	printf("身高:%.2f米\n", height);
	printf("性别:%c\n", gender);

	//修改变量的值(重新赋值)
	age = 21;
	height = 1.76f;

	printf("\n修改后:\n");
	printf("年龄:%d\n", age);
	printf("身高:%.2f米\n", height);
	return 0;
}

运行结果会显示:
年龄:20

身高:1.75米

性别:M

修改后:

年龄:21

身高:1.76米

这就是变量的核心用法:声明→初始化→使用→修改,全程灵活可控。

三、C 语言核心数据类型:按 “规格” 选储物柜

C 语言是 “静态类型语言”,声明变量时必须指定数据类型 —— 这就像租储物柜前要确定是 “放小零件的小柜子” 还是 “放大设备的大柜子”,避免空间浪费或不够用。

下面重点讲 4 类常用数据类型:整数类型、浮点类型、字符类型、字符串(字符数组),每个类型都配 “占用字节 + 取值范围 + 应用场景 + 代码示例”。

1. 整数类型:存储没有小数的数字

比如年龄(20)、学号(1001)、计数(5)等,常用的有int“short”“long”“unsigned int”,重点掌握int(最常用)。

数据类型占用字节(32 位 VS2022)取值范围应用场景
int4 字节-2147483648 ~ 2147483647大多数整数场景(年龄、分数、计数)
short2 字节-32768 ~ 32767小范围整数(比如班级人数)
long4 字节(32 位)/8 字节(64 位)更大范围整数超大数值(比如身份证号)
unsigned int4 字节0 ~ 4294967295无负数场景(比如商品数量)

代码示例
 

#include <stdio.h>

int main() {
    int student_id = 2024001;  // 学号(int足够存储)
    short class_num = 35;      // 班级人数(short节省内存)
    unsigned int goods_count = 100;  // 商品数量(无负数)
    
    printf("学号:%d\n", student_id);
    printf("班级人数:%d\n", class_num);
    printf("商品数量:%u\n", goods_count);  // unsigned int用%u输出
    
    return 0;
}

注意unsigned int是 “无符号整数”,只能存非负数,输出时要用%u格式符,不能用%d

2. 浮点类型:存储带小数的数字

比如身高(1.75)、体重(62.5)、成绩(95.5)等,常用floatdouble,重点掌握double(精度更高,更常用)。

数据类型占用字节精度(有效数字)取值范围应用场景
float4 字节6-7 位±3.4×10³⁸对精度要求不高的小数(比如身高)
double8 字节15-16 位±1.7×10³⁰⁸高精度小数(比如成绩、计算)

代码示例
 

#include <stdio.h>

int main() {
    float weight = 62.5f;  // float类型末尾要加f(否则默认是double)
    double score = 98.5;   // double类型不用加f,精度更高
    
    // 输出时控制小数位数:%.1f表示保留1位,%.2f保留2位
    printf("体重:%.1f公斤\n", weight);
    printf("成绩:%.2f分\n", score);
    
    // 计算BMI(体重kg / 身高m的平方)
    double height = 1.75;
    double bmi = weight / (height * height);
    printf("BMI指数:%.2f\n", bmi);
    
    return 0;
}

关键注意点

  • float类型赋值时,末尾必须加f(比如62.5f),否则编译器会把数字当成double类型,可能出现精度问题。
  • 输出浮点类型用%ffloatdouble都可以),想控制小数位数就用%.nf(n 是要保留的位数)。

3. 字符类型:存储单个字符

比如性别('M')、成绩等级('A')、符号('+')等,用char类型,重点记住 “单引号包裹单个字符”。

数据类型占用字节取值范围(VS2022)应用场景
char1 字节-128 ~ 127存储单个字符(字母、数字、符号)

代码示例
 

#include <stdio.h>

int main() {
    char grade = 'A';  // 成绩等级(单引号包裹单个字符)
    char symbol = '+'; // 运算符符号
    char num_char = '5'; // 字符'5'(不是数字5,存储的是ASCII码)
    
    // 输出字符用%c格式符
    printf("成绩等级:%c\n", grade);
    printf("运算符:%c\n", symbol);
    printf("字符'5':%c\n", num_char);
    
    // 查看字符对应的ASCII码(用%d输出)
    printf("字符'A'的ASCII码:%d\n", 'A');  // 输出65
    printf("字符'5'的ASCII码:%d\n", num_char);  // 输出53
    
    return 0;
}

关键注意点

  • char类型只能存单个字符,不能存多个字符(比如char name = '张三'错误)。
  • 字符用单引号包裹,字符串用双引号(后续讲),不要混淆(比如'A'正确,"A"是字符串,本质不同)。
  • char类型本质是存储 “ASCII 码”(比如 'A' 对应 65,'0' 对应 48),所以用%d输出会显示 ASCII 码值。

4. 字符串:存储多个字符(字符数组)

C 语言没有专门的 “字符串类型”,要存储多个字符(比如姓名 “张三”、问候语 “Hello”),需要用char数组(字符数组),重点记住 “双引号包裹,末尾自动加 '\0'(字符串结束标志)”。

语法格式
 

char 字符串名[] = "内容";  // []里可以不写长度,由内容长度决定

代码示例
 

#include <stdio.h>

int main() {
    // 字符串:存储姓名、问候语
    char name[] = "张三";  // 中文也可以(每个中文字符占2字节,数组自动适配)
    char greeting[] = "Hello, C Language!";
    
    // 输出字符串用%s格式符
    printf("姓名:%s\n", name);
    printf("问候语:%s\n", greeting);
    
    // 遍历字符串(通过索引访问每个字符,直到'\0'结束)
    printf("\n问候语的每个字符:");
    for (int i = 0; greeting[i] != '\0'; i++) {
        printf("%c ", greeting[i]);
    }
    
    return 0;
}

运行结果

姓名:张三
问候语:Hello, C Language!
问候语的每个字符:H e l l o , C L a n g u a g e !

关键注意点

  • 字符串必须用双引号包裹,字符数组末尾会自动添加'\0'(不用手动写),'\0'是字符串的 “结束标志”,编译器靠它判断字符串长度。
  • 输出字符串用%s格式符,不用遍历就能直接输出全部内容(VS2022 会自动识别'\0')。

四、数据类型转换:不同 “规格” 的储物柜如何互通?

有时候我们需要用不同类型的变量计算(比如int + float),这时候编译器会自动做 “隐式转换”,或者我们手动做 “显式转换”。

1. 隐式转换(自动转换,编译器帮你做)

遵循 “小范围→大范围”“低精度→高精度” 的规则,避免数据丢失:

  • int 和 float 计算:int 自动转为 float(比如20 + 1.75f → 20.0f + 1.75f)。
  • char 和 int 计算:char 自动转为 int(用 ASCII 码计算,比如'A' + 2 → 65 + 2 = 67,对应字符 'C')。

代码示例
 

#include <stdio.h>

int main() {
    int a = 20;
    float b = 1.75f;
    char c = 'A';
    
    // 隐式转换:int → float
    float result1 = a + b;
    printf("20 + 1.75f = %.2f\n", result1);  // 输出21.75
    
    // 隐式转换:char → int
    int result2 = c + 2;
    printf("'A' + 2 = %d(对应字符%c)\n", result2, result2);  // 输出67(C)
    
    return 0;
}

2. 显式转换(手动转换,强制转换)

当需要 “大范围→小范围” 转换时(比如float → int),必须手动强制转换,语法:(目标类型) 变量/值

代码示例

#include <stdio.h>

int main() {
    float pi = 3.14f;
    
    // 显式转换:float → int(直接舍弃小数,不是四舍五入)
    int pi_int = (int)pi;
    printf("3.14f 强制转为int:%d\n", pi_int);  // 输出3(不是4)
    
    // 计算圆的面积(半径是int,结果是float)
    int r = 5;
    float area = 3.14f * r * r;  // 隐式转换:int → float
    printf("半径5的圆面积:%.2f\n", area);  // 输出78.50
    
    return 0;
}

注意:强制转换可能导致数据丢失(比如3.99f转为int是 3),非必要不使用。

五、VS2022 调试技巧:查看变量的值(新手必备)

写代码时,有时候想确认变量是否正确赋值、修改,这时候可以用 VS2022 的调试功能,实时查看变量变化:

  1. 打开代码文件,在要查看的代码行左侧点击(添加断点,会出现红色圆点),比如在printf("年龄:%d\n", age);这一行添加断点。
  2. 按 F5 启动调试(不是 Ctrl+F5),程序会在断点处暂停。
  3. 点击顶部菜单栏 “调试”→“窗口”→“局部变量”,会弹出 “局部变量” 窗口,里面会显示当前所有变量的值(比如age=20“height=1.75f”)。
     
  4. 按 F10 可以 “单步执行”,一步步看变量如何变化(比如执行到age=21时,窗口里的age会实时更新为 21)。
  5. 调试结束后,按 Shift+F5 退出调试。

这个技巧后续会经常用到,遇到变量赋值错误、逻辑异常时,调试能快速找到问题!

六、今日总结与课后任务

1. 核心总结

  • 变量:内存中的存储单元,用来存储可修改的数据,必须 “声明 + 初始化” 后使用。
  • 数据类型:指定变量的存储大小和范围,常用 4 类:int(整数)、double(高精度小数)、char(单个字符)、char[](字符串)。
  • 格式符:输出时要对应类型(%d→int,%f→float/double,%c→char,%s→字符串)。

2. 课后任务(必须亲手敲代码!)

完成后可以在评论区晒出你的代码和运行结果,遇到报错也能随时提问~ 明天我们会讲 “标准输入输出函数”,教你如何让用户手动输入数据(比如让用户自己输入姓名、年龄),让程序从 “固定输出” 变成 “互动式”,实用性直接升级!

  1. 编写程序:声明变量存储 “姓名(字符串)、年龄(int)、体重(double)、成绩等级(char)”,初始化后输出所有信息,再修改年龄
  2. 尝试 “数据类型转换” 练习:定义int num1 = 10float num2 = 3.5f,计算num1 * num2并输出结果;再将结果强制转为int,观察小数部分的变化。
  3. 踩坑练习:故意写 1-2 个错误代码(比如char name = "张三"float weight = 62.5不加 f),运行后查看 VS2022 的报错提示,试着根据提示修改(熟悉常见错误的排查方式)。

一定要亲手敲!一定要亲手敲!!一定要亲手敲!!!大家可以把代码和运行结果截图发评论区,有问题也在评论区留言哦,博主看到会第一时间回复!

更多推荐