C 语言变量详解:类型、命名规则、定义声明与内存管理
变量是程序可操作的存储区域名称。C 中每个变量有特定类型,决定其内存大小布局、可存储值范围及可应用操作集。
变量名由字母、数字、下划线组成,必须以字母或下划线开头。大小写字母不同,因 C 区分大小写。基于前章基本类型,有以下基本变量类型:
| 序号 | 类型及描述 |
|---|---|
| 1 | char 通常单字节。属整数类型。 |
| 2 | int 机器最自然整数大小。 |
| 3 | float 单精度浮点值。 |
| 4 | double 双精度浮点值。 |
| 5 | void 表示类型缺失。 |
C 还允许定义其他变量类型,后续章节覆盖枚举、指针、数组、结构、共用体等。本章仅学习基本变量类型。
C 语言变量定义
变量定义告诉编译器在何处创建变量存储及创建多少存储。变量定义指定数据类型,包含一个或多个该类型变量列表:
type variable_list;
此处 type 必须是有效 C 数据类型(含 char、w_char、int、float、double、bool 或用户定义对象);variable_list 可包含逗号分隔的一个或多个标识符名。有效声明示例:
int i, j, k; char c, ch; float f, salary; double d;
int i, j, k; 声明并定义变量 i、j、k,指示编译器创建名为 i、j、k 的 int 类型变量。
变量可在声明时初始化(赋初值)。初始化由等号后跟常量表达式组成:
type variable_name = value;
示例:
extern int d = 3, f = 5; // d 和 f 的声明 int d = 3, f = 5; // 定义并初始化 d 和 f byte z = 22; // 定义并初始化 z char x = 'x'; // 变量 x 值为 'x'
无初始化器的定义:静态存储期变量隐式初始化为 NULL(所有字节值 0);其他变量初始值未定义。
C 语言变量声明
变量声明向编译器保证存在给定类型和名称的变量,使编译器无需完整变量细节即可继续编译。变量定义仅在编译时有意义,链接时编译器需实际变量定义。
使用多文件且在其中一个文件定义变量(链接时可用)时,变量声明很有用。使用关键字 extern 在任何位置声明变量。虽然可在 C 程序中多次声明变量,但只能在一个文件、函数或代码块中定义一次。
示例
尝试下例,变量在顶部声明,但在 main 函数中定义初始化:
在线演示#include <stdio.h>
// 变量声明:
extern int a, b;
extern int c;
extern float f;
int main() {
/* 变量定义: */
int a, b;
int c;
float f;
/* 实际初始化 */
a = 10;
b = 20;
c = a + b;
printf("c 的值 : %d \n", c);
f = 70.0/3.0;
printf("f 的值 : %f \n", f);
return 0;
}
编译执行上述代码产生以下结果:
c 的值 : 30 f 的值 : 23.333334
相同概念适用于函数声明:声明时提供函数名,实际定义可在别处。例如:
// 函数声明
int func();
int main() {
// 函数调用
int i = func();
}
// 函数定义
int func() {
return 0;
}
C 语言中的 Lvalue 和 Rvalue
C 中有两种表达式:
lvalue —— 引用内存位置的表达式称为 "lvalue" 表达式。lvalue 可出现在赋值号左侧或右侧。
rvalue —— rvalue 指存储在内存某地址的数据值。rvalue 是不能赋值的表达式,即 rvalue 可出现在赋值号右侧但不能出现在左侧。
变量是 lvalue,可出现在赋值号左侧。数值字面量是 rvalue,不可赋值,不能出现在赋值号左侧。看下面有效和无效语句:
int g = 20; // 有效语句 10 = 20; // 无效语句;编译时出错
C语言
- 精通C#变量与基础数据类型:完整指南
- 理解 C# 变量作用域:类级、方法级与块级详解
- 掌握 C++ 变量、字面量与常量:核心概念与实战指南
- C 语言变量、常量与字面量完全指南
- C 语言存储类完全解析:auto、extern、static、register
- C++ 变量与数据类型全解析:int、double、char、string、bool 详细指南
- 理解 C 语言作用域规则:局部、全局与形式变量
- C 语言指针实战:从入门到高级编程
- 深入理解 Verilog 赋值语句:类型、语法与最佳实践
- 精通Python global关键字:用法、时机与最佳实践
- Java 变量与字面量:全面指南
- 理解 Java 变量类型:综合指南