欢迎光临
我们一直在努力

C 语言学习笔记(二):数据类型与变量

上一篇我们把 C 语言的基础概念过了一遍,算是正式入门了。这一篇我们来学习数据类型和变量,这是编写更复杂程序的核心基础,也是我之前反复踩坑的地方,今天就把这些知识彻底梳理清楚。

一、数据类型介绍

C 语言提供了丰富的数据类型,用来描述生活中各种各样的数据。我们可以把它分为两大类:
基本数据类型:最基础的原子类型

  • 基本数据类型:最基础的原子类型
    • 整型:int、short、long、long long
    • 字符型:char
    • 浮点型:float、double
  • 构造数据类型:由基本类型组合而成
    • 数组、结构体、枚举、联合体等

不同的数据类型,在内存中占用的大小不同,能表示的数据范围也不同,这是我们选择类型的核心依据。

二、signed 和 unsigned

在整型和字符型前,我们可以加上 signed 或 unsigned 来修饰:

  • signed:表示有符号数,即可以表示正数、负数和 0
  • unsigned:表示无符号数,只能表示非负数(0 和正数)

举个例子:

  • signed char:范围是 -128 ~ 127
  • unsigned char:范围是 0 ~ 255

小提示:默认情况下,int、char 等都是 signed 类型,只有在需要表示纯正数(比如年龄、计数)时,才会用 unsigned。

三、数据类型的取值范围

不同数据类型的取值范围,是由它在内存中占用的字节数决定的。我们可以通过 <limits.h> 和 <float.h> 头文件里的宏来查看:

类型字节数(常见)取值范围
char 1 signed: -128 ~ 127unsigned: 0 ~ 255
short 2 signed: -32768 ~ 32767
int 4 signed: -2^31 ~ 2^31-1
long 4/8 至少和 int 一样大
long long 8 -2^63 ~ 2^63-1
float 4 约 ±3.4e±38,精度约 6 位小数
double 8 约 ±1.7e±308,精度约 15 位小数

经验:日常开发中,整数用 int 足够,小数用 double 精度更高,特殊场景(如嵌入式)才会考虑更小的类型。

四、变量

变量就是在内存中存储数据的容器,我们需要先定义,再使用。

1. 变量的定义

语法:类型 变量名 = 初始值;

int age = 18; // 整型变量
char gender = 'M'; // 字符型变量
double score = 95.5;// 浮点型变量

2. 变量的命名规则

  • 只能由字母、数字、下划线组成
  • 不能以数字开头
  • 不能和 C 语言关键字重名
  • 见名知意,比如用 age 而不是 a

3. 变量的作用域

  • 局部变量:定义在函数内部,只在函数内有效
  • 全局变量:定义在函数外部,整个程序都有效
  • 踩坑提醒:局部变量如果不初始化,值是随机的 “垃圾值”,一定要养成初始化变量的习惯。

五、算术操作符:+、-、*、/、%

C 语言提供了基本的算术运算:

操作符作用示例
+ 加法 a + b
减法 a – b
* 乘法 a * b
/ 除法 a / b
% 取模(求余数) a % b

重点注意:

  • 整数除法:5 / 2 结果是 2,会舍去小数部分
  • 浮点数除法:5.0 / 2 结果是 2.5,至少有一个操作数是浮点数
  • 取模:只能用于整数,5 % 2 结果是 1,负数取模结果随编译器实现
  • 六、赋值操作符:= 和复合赋值

    1. 基本赋值

    = 是赋值操作符,作用是把右边的值赋给左边的变量:

    int a = 10;
    a = a + 5; // a 变成 15

    2. 复合赋值

    为了简化代码,C 语言提供了复合赋值操作符:

    a += 5; // 等价于 a = a + 5
    a -= 3; // 等价于 a = a – 3
    a *= 2; // 等价于 a = a * 2
    a /= 4; // 等价于 a = a / 4
    a %= 2; // 等价于 a = a % 2

    七、单目操作符:++、–、+、-

    单目操作符只操作一个变量,最常用的是自增 ++ 和自减 –:

    1. 前置 ++/–

    先自增 / 自减,再参与运算:

    int a = 5;
    int b = ++a; // a 先变成 6,再赋值给 b → b = 6, a = 6

    2. 后置 ++/–

    先参与运算,再自增 / 自减:

    int a = 5;
    int b = a++; // 先把 a=5 赋值给 b,a 再变成 6 → b = 5, a = 6

    易错点:++a 和 a++ 的结果完全不同,写循环时要特别注意,避免逻辑错误。

    八、强制类型转换

    当不同类型的数据参与运算时,C 语言会自动进行类型转换,但有时我们需要手动控制,这就是强制类型转换:

    语法:(目标类型) 变量/表达式

    double pi = 3.14;
    int a = (int)pi; // 强制把 double 转成 int → a = 3,舍去小数

    常见场景:

    • 把浮点数转成整数(截断小数)
    • 把大类型转成小类型(可能丢失精度)
    • 避免整数除法的问题:(double)5 / 2 → 结果是 2.5

    九、scanf 和 printf 介绍

    printf 和 scanf 是我们和程序交互的核心函数:

    1. printf(格式化输出)

    语法:printf("格式化字符串", 变量列表);

    int a = 10;
    double b = 3.14;
    printf("a = %d, b = %.2f\\n", a, b);
    // 输出:a = 10, b = 3.14

    常用占位符:

    • %d:整型
    • %c:字符
    • %s:字符串
    • %f:浮点数
    • %lf:double 类型

    2. scanf(格式化输入)

    语法:scanf("格式化字符串", &变量列表);

    int age;
    scanf("%d", &age); // 从键盘读取一个整数,存入 age

    注意:scanf 中变量前必须加 &(取地址符),数组名除外。

    总结

    这一篇我们系统学习了 C 语言的数据类型、变量和基本操作符,这些是编写任何程序的基石。

    回想我刚开始学的时候,总是搞不清 signed 和 unsigned 的区别,也经常在 ++ 前置后置上写错逻辑。直到后来自己写代码、写博客,才慢慢把这些细节吃透。

    下一篇我们会学习流程控制语句(if/else、for、while),终于可以写出有逻辑、能判断的程序了,一起加油!

    持续更新 C 语言学习笔记,欢迎关注点赞收藏~输出才是最好的学习方式。

    赞(0)
    未经允许不得转载:171主机测评 » C 语言学习笔记(二):数据类型与变量
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址