首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >收集飞花令碎片——C语言变量和常量

收集飞花令碎片——C语言变量和常量

作者头像
枫亭湖区
发布2025-11-13 09:05:01
发布2025-11-13 09:05:01
1020
举报

一、概念介绍

生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等) 有些值是可变的(比如:年龄,体重,薪资)。 不变的值,C语言中用常量的概念来表示,变的值C语言中用变量来表示。

二、变量

在C语言中,变量是程序中最基本的存储单元,用于存储和操作数据。下面我将全面讲解C语言中定义变量的方法。

1. 基本定义

语法
代码语言:javascript
复制
//数据类型 变量名;
  • 代码示例
代码语言:javascript
复制
int age;          // 定义一个整型变量age
float salary;     // 定义一个浮点型变量salary
char grade;       // 定义一个字符型变量grade

2. 变量的初始化

语法
代码语言:javascript
复制
数据类型 变量名 = 初始值;
  • 代码展示
代码语言:javascript
复制
int count = 10;           // 定义并初始化为10
double pi = 3.14159;      // 定义双精度浮点数并初始化
char letter = 'A';        // 定义字符变量并初始化

3. 同时定义多个变量

语法
代码语言:javascript
复制
数据类型 变量名1, 变量名2, 变量名3;
  • 代码展示
代码语言:javascript
复制
int x, y, z;              // 定义三个整型变量
float a = 1.2, b = 3.4;   // 定义两个浮点变量并初始化

4. 不同类型变量的定义

1) 基本数据类型
代码语言:javascript
复制
char c;           // 字符型,通常1字节
short s;          // 短整型,通常2字节
int i;            // 整型,通常4字节
long l;           // 长整型,通常4或8字节
float f;          // 单精度浮点,通常4字节
double d;         // 双精度浮点,通常8字节
2) 带符号修饰符
代码语言:javascript
复制
signed int si;     // 有符号整型(默认)
unsigned int ui;   // 无符号整型
3) 限定符
代码语言:javascript
复制
const int MAX = 100;     // 常量,不可修改

5. 变量的作用域

1)局部变量

概念: 在函数或代码块内部定义的变量

代码语言:javascript
复制
void function() {
    int localVar = 5;  // 局部变量
    // ...
}
2)全局变量

概念: 在所有函数外部定义的变量

代码语言:javascript
复制
int globalVar;  // 全局变量

void func1() {
    globalVar = 10;
}

void func2() {
    globalVar = 20;
}
3)静态变量

概念: 静态变量是在程序运行期间一直存在的变量,即使离开了它的作用域,其值也会被保留。静态变量存储在内存的静态存储区,而不是栈或堆中 使用static关键字定义的变量

代码语言:javascript
复制
void func() {
    static int count = 0;  // 静态局部变量
    count++;
}

6. 变量的生命周期

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

  • 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
  • 全局变量的生命周期是:整个程序的生命周期。

7. 特殊变量

特殊变量我会在后期连续出文展去深度讲解,这里我们只作基本概念的解读

1) 指针变量
代码语言:javascript
复制
int *ptr;       // 整型指针
char *str;      // 字符型指针
void *vp;       // 无类型指针
2) 数组变量
代码语言:javascript
复制
int arr[10];            // 整型数组
char name[20];          // 字符数组(字符串)
float matrix[3][3];     // 二维浮点数组
3) 结构体变量
代码语言:javascript
复制
struct Point {
    int x;
    int y;
};

struct Point p1;        // 结构体变量
4) 联合体变量
代码语言:javascript
复制
union Data {
    int i;
    float f;
    char str[20];
};

union Data data;        // 联合体变量
5) 枚举变量
代码语言:javascript
复制
enum Color {RED, GREEN, BLUE};
enum Color c = RED;     // 枚举变量
7. 变量命名规则

变量命名规则 只能包含字母、数字和下划线 不能以数字开头 不能使用C语言关键字 区分大小写 应具有描述性

三、常量

在C语言中,变量是程序中最基本的存储单元,用于存储和操作数据。下面我将全面讲解C语言中定义变量的方法。

1. 使用#define预处理器定义常量

基本语法
代码语言:javascript
复制
#define 常量名 常量值
特点
  • 预处理阶段进行文本替换
  • 没有类型检查
  • 不占用内存空间
  • 作用域从定义处到文件结束

代码示例

代码语言:javascript
复制
#define PI 3.1415926
#define MAX_SIZE 100
#define WELCOME_MSG "Hello, World!"
拓展:带参数的宏常量
代码语言:javascript
复制
#define SQUARE(x) ((x)*(x))
#define MAX(a,b) ((a)>(b)?(a):(b))

这两行代码是C语言中使用#define预处理指令定义的宏(macro),它们分别实现了计算平方和求最大值的功能。下面我将详细解释它们的含义和工作原理:

1. #define SQUARE(x) ((x)*(x))

作用:

  • 定义一个计算平方的宏,将输入的参数x平方后返回结果

分解解释:

  • #define:预处理指令,用于定义宏
  • SQUARE(x):宏名称为SQUARE,带有一个参数x
  • ((x)*(x)):宏的展开内容,计算x乘以x
代码语言:javascript
复制
int num = 5;
int result = SQUARE(num);  // 展开为:((num)*(num)) → 5*5 = 25

2. #define MAX(a,b) ((a)>(b)?(a):(b)) 作用:

  • 定义一个求最大值的宏,返回两个参数a和b中的较大值

分解解释:

  • #define:预处理指令
  • MAX(a,b):宏名称为MAX,带有两个参数a和b
  • ((a)>(b)?(a):(b)):使用三目运算符(条件运算符):
  • 如果(a)>(b)为真,返回(a)
  • 否则返回(b)
代码语言:javascript
复制
int x = 10, y = 20;
int max = MAX(x, y);  // 展开为:((x)>(y)?(x):(y)) → 20

2. 使用const关键字定义常量

在C语言中,const修饰的是常变量 在C++中,const修饰的就是常量

1) 基本语法
代码语言:javascript
复制
const 数据类型 常量名 = 值;
2) 特点
  • 编译时进行类型检查
  • 占用内存空间
  • 有明确的作用域规则
  • 不能被修改

代码示例

代码语言:javascript
复制
const int MAX = 100;
const float PI = 3.14159f;
const char NEWLINE = '\n';

3. 字符/字符串字面量

  • 字符常量(如 ‘A’):

实际存储为ASCII码值(65) 在C标准中被定义为int类型(占4字节),而非char(历史原因)

代码语言:javascript
复制
printf("%d", sizeof('A'));  // 输出4(在大多数系统中)
  • 字符串常量(如 “ABC”):

存储为连续的字符内存块 + 终止符’\0’ 实际是const char[]类型的匿名数组

代码语言:javascript
复制
printf("%d", sizeof("A"));  // 输出2('A' + '\0')

在 C 语言中,%s 是用于输出 字符串(字符数组) 的格式说明符。它专门用于处理以 \0 (null 字符) 结尾的字符数组(即 C 风格的字符串)。以下是详细说明和用法示例:

代码语言:javascript
复制
char str[] = "Hello World";
printf("%s", str);  // 输出整个字符串

后面我们会详细介绍C语言的字符串的用法

C语言同时存在字符常量和字符串常量,本质上是因为:

  • 数据类型不同:一个是整型值,一个是字符数组
  • 内存表示不同:单字节 vs 连续内存块
  • 操作需求不同:寄存器运算 vs 指针操作
  • 历史传承:延续了低级语言对字符和字符串的区分

4. 使用enum枚举定义常量

1. 基本语法
代码语言:javascript
复制
enum 枚举名 {常量1, 常量2, ...};
2. 特点
  • 定义一组相关的整型常量
  • 默认从0开始递增
  • 可以显式指定值
  • 有类型检查
  • 枚举常量必须是整型值

代码示例

代码语言:javascript
复制
// 定义电梯状态
enum ElevatorState {
    IDLE,       // 空闲状态(0)
    MOVING_UP,  // 上升中(1)
    MOVING_DOWN,// 下降中(2)
    EMERGENCY_STOP // 紧急停止(3)
};

// 使用示例
enum ElevatorState currentState = IDLE;  //currentState是变量名字,IDLE给变量初始化

void handleElevator() {
    switch(currentState) {
        case IDLE:
            printf("电梯待命\n");
            break;
        case MOVING_UP:
            printf("电梯上升中\n");
            break;
        // 其他状态处理...
    }
}

后期我会利用枚举类与其它知识的结合去编写完整的电梯状态机的代码

各位看官想必看到这里已经很辛苦了,小编来自发一杯

最后,如果你喜欢我的文章,记得给个三连哦

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概念介绍
  • 二、变量
    • 1. 基本定义
      • 语法
    • 2. 变量的初始化
      • 语法
    • 3. 同时定义多个变量
      • 语法
    • 4. 不同类型变量的定义
      • 1) 基本数据类型
      • 2) 带符号修饰符
      • 3) 限定符
    • 5. 变量的作用域
      • 1)局部变量
      • 2)全局变量
      • 3)静态变量
    • 6. 变量的生命周期
    • 7. 特殊变量
      • 1) 指针变量
      • 2) 数组变量
      • 3) 结构体变量
      • 4) 联合体变量
      • 5) 枚举变量
      • 7. 变量命名规则
  • 三、常量
    • 1. 使用#define预处理器定义常量
      • 基本语法
      • 特点
      • 拓展:带参数的宏常量
    • 2. 使用const关键字定义常量
      • 1) 基本语法
      • 2) 特点
    • 3. 字符/字符串字面量
    • 4. 使用enum枚举定义常量
      • 1. 基本语法
      • 2. 特点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档