欢迎光临
我们一直在努力

变量:程序中的动态数据存储单元

概念

定义:在程序运行过程中值可变的量,称之为变量。

  • 变量对应内存中(局部变量默认在栈内存,全局/静态变量在数据段)具有特定属性的存储单元,用于存放数据(变量值)。
  • 变量必须有唯一名称,通过变量名可访问对应的存储单元。

格式

数据类型 变量名列表;

举例

// 1. 声明变量并初始化
// 解释:向内存申请对应类型的存储空间,并赋予初始值
// 命名规范:变量名是标识符的一种,以字母或者下划线开头,只能包含字母、下划线、数字,例如:set_user、_int、name2
int age = 21; // 注意:= 赋值运算符,意思是将 = 右边的值赋值给 = 左边的变量

// 2. 先声明,后赋值
int count;
count = 10; // 如果一个局部变量(函数中的变量)未赋值,此时系统会默认一个随机值

// 3. 初始化后重新赋值
int number = 12; // 12
printf("%d\\n", number); // 输出12 %d 意思是,将number以十进制的int输出,%ld 意思是 以十进制long输出
number = 22;
printf("%d\\n", number); // 输出22 %d 意思是,将number以十进制的int输出,%ld 意思是 以十进制long输出

// 4. 同一类型多个变量定义,变量之间使用逗号分隔符
int a, b = 10, c; // 定义了3个int类型的变量,仅仅b初始化,a,c是随机值
// 访问未初始化的变量,编译不报错,但属于“未定义行为UB”
// 为初始化变量存储单元中是随机值,结果不可预测,不建议访问
printf("%d,%d,%d\\n", a, b, c);

说明:
定义基本类型(整型、浮点型、字符型)变量时,编译器会根据数据类型分配对应大小的内存空间,用于存储对应类型的数据。

命名规范

  • 组成规则:以字母(a~z/A~Z)或者下划线(_)开头,仅包含字母、数字(0~9)、下划线。
  • 禁止规则:不能与关键字(如if,int,float)或系统预定义标识符(printf、main)重名。
  • 变量名、变量值、存储单元的关系:

标识符

定义:用来表示程序中对象名称的有效字符序列,对象包括==变量、常量、函数、数组、构造类型等==,即标识符是这些对象的名字。

构成规则:

  • 仅允许由字母、数字、下划线三种字符构成,切必须以字母或者下划线开头(举例: _int、num2和,2num非法)
  • 大小写敏感:编译系统区分字母大小写(例如:num和Num是两个完全不同的标识符)
  • 命名约定(非强制,推荐遵循):
    • 变量名、函数名:
      • C风格(小写字母 + 下划线,例如:set_count)
      • Java风格(小驼峰命名法,首单词字母小写,后续单词首字母大写,例如:setCount)
    • 常量名、枚举名:
      • 大写字母+下划线(例如:MAX_VALUE)

标识符分类:

  • 关键字:32个,系统赋予特定含义和用途,不可用作自定义标识符:

auto break case char const continue default do double else enum extern
float for goto if int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while

  • 系统预定义标识符:系统提供的标识符(如标准库提供函数名sin,printf,scanf,预处理指令include,define等)。

C 语言常用预处理指令(共 12 个,使用时需加#前缀):

#define #endif #elif #error #line #include #ifdef #ifndef #pragma #undef #if #else

  • 用户标识符:用户自定义的标识符,用于给变量、自定义函数、符号常量、数组、构造类型、文件等命名。

注意:C语言要求变量
先定义,后使用,未定义的变量直接使用会导致编译报错。

使用

  • 同类型变量的两种定义方式:

// 写法1:一个类型说明语句定义多个同类型变量
// 优点:简洁
// 缺点:可读性较差,变量较多时不易区分
int a, b, c, d;
int a1 = 3, b1 = 4, c1 = 5, d1 = 6;

// 写法2:多个类型说明语句定义同类型变量
// 优点:可读性强(便于单独注释变量含义)
// 缺点:略显繁琐
int aa;
int bb;
int cc;
int dd;
int aa1 = 3; // 年龄
int aa2 = 4; // 分数
int aa3 = 5; // 数量
int aa4 = 6; // 编号

  • 未初始化变量的特性:

同类型说明语句仅为变量分配内存空间,未赋值前,存储单元中的值是内存随机值(由当前内存状态决定)。

在 C 标准中,==访问未初始化变量属于 “未定义行为(UB)”==,运行结果不可预测(不同编译器、不同运行环境结果可能不同)。

int a, b, c, d;
// 访问未初始化变量:属于未定义行为,不建议操作
printf("%d,%d,%d,%d\\n", a, b, c, d);
// 第一次运行结果:-1543118880,32767,0,0
// 第二次运行结果:243305312,32766,0,0(结果随机)

  • 变量初始化与类型转换:
    • C语言允许定义变量时直接赋初始值(推荐,避免访问随机值)
    • 为长整型(long)变量赋值时,若赋值数据为int型常量,编译器会自动将其转换为long型(即隐式类型转换):

long a = 12L; // 将long类型常量赋值long类型变量,= 左右两侧类型一致,无需转换 long b = 12; // 将int类型常量赋值long类型变量, = 左侧时long类型,右侧是int类型,此时会隐式转换

  • 整型变量的存储范围:

整型变量的存储范围由所占字节数和符号属性决定(无符号变量无负数范围):

  • 示例:unsigned char a(1字节),存储范围0~255;char b / signed char b(1字节),存储范围-128~127.

赞(0)
未经允许不得转载:171主机测评 » 变量:程序中的动态数据存储单元
分享到: 更多 (0)

评论 抢沙发

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