C 变量
C - 变量
Section titled “C - 变量”变量是内存中一个命名的存储位置,用于存储值。程序操作这些值。C 中的每个变量都有一个特定的数据类型,该类型决定了它的大小、内存布局、取值范围以及适用于它的操作。
变量名(标识符)遵循特定规则:必须以字母或下划线开头,后跟字母、数字或下划线。C 区分大小写(age 和 Age 是不同的变量)。
基本变量类型对应于基本数据类型:
| 类型 | 描述 |
|---|---|
char, signed char, unsigned char | 存储单个字符或小整数。 |
short, int, long, long long (及其 unsigned 变体) | 存储不同大小的整数。 |
float, double, long double | 存储带小数部分的数字。 |
bool (从 <stdbool.h>) | 存储布尔值(true 或 false)。 |
C 还支持派生类型,如指针、数组、结构体等,允许定义更复杂的变量。
C 中的变量定义(Variable Definition)
Section titled “C 中的变量定义(Variable Definition)”定义为变量保留内存,并将名称与该内存位置关联。它指定数据类型和变量名(s):
type variable_list;type 是一个有效的 C 数据类型(例如,int、float、char、struct MyData)。variable_list 是一个或多个以逗号分隔的标识符。
定义示例:
#include <stdbool.h> // 用于 bool#include <stdint.h> // 用于 uint8_t
int i, j, k; // 定义三个整型变量char c, initial; // 定义两个字符变量float salary, tax; // 定义两个单精度浮点变量double pi; // 定义一个双精度浮点变量bool is_valid; // 定义一个布尔变量uint8_t status_code; // 定义一个 8 位无符号整型变量初始化(Initialization)
Section titled “初始化(Initialization)”变量可以在定义时使用赋值运算符(=)进行初始化(赋予初始值):
type variable_name = value;示例:
int count = 0; // 定义 count 并初始化为 0char grade = 'A'; // 定义 grade 并初始化为 'A'float temperature = 98.6f; // 定义 temperature 并初始化(浮点字面量使用 'f' 后缀)double planck_constant = 6.62607015e-34;int x = 10, y = 20; // 定义并初始化多个变量
// 派生类型的初始化int numbers[3] = {1, 2, 3}; // 初始化一个数组char message[] = "Hello"; // 初始化一个字符数组(字符串)如果具有静态存储期(static storage duration)的变量(如全局变量或声明为 static 的变量)未显式初始化,它会隐式初始化为零(或指针的 NULL)。局部变量(自动存储期 automatic storage duration)如果在未显式初始化的情况下使用,其初始值是未定义的——在赋值之前使用它们会导致不可预测的行为。
C 中的变量声明(Variable Declaration)
Section titled “C 中的变量声明(Variable Declaration)”声明向编译器介绍变量的名称和类型,但不一定保留存储空间(尽管定义通常隐含声明)。当使用在其他文件中定义或在使用点之前定义的变量时,声明至关重要。
extern 关键字用于声明引用在别处定义的变量:
extern int global_counter; // 声明在另一个文件中定义的 global_counterextern const char *app_name; // 声明在别处定义的 app_name一个变量可以声明多次(例如,在多个头文件中使用 extern),但它必须在一个源文件中只定义一次。
示例 (概念性多文件场景):
Section titled “示例 (概念性多文件场景):”// --- main.c ---#include <stdio.h>
// 声明在另一个文件 another_file.c 中定义的变量extern int shared_value;extern void print_shared_value(void); // 函数声明
int main(void) { printf("初始共享值 (extern 声明):%d\n", shared_value); shared_value = 100; // 修改共享变量 print_shared_value(); return 0;}
// --- another_file.c ---#include <stdio.h>
// 共享变量的定义int shared_value = 42; // 定义并初始化
// 函数定义void print_shared_value(void) { printf("当前共享值 (在此定义):%d\n", shared_value);}要编译这个程序,您通常需要编译两个文件并链接它们:
$ gcc main.c another_file.c -o my_program$ ./my_program预期输出:
Initial shared value (declared extern): 42Current shared value (defined here): 100相同的声明概念适用于函数。
C 中的左值 (lvalue) 和右值 (rvalue)
Section titled “C 中的左值 (lvalue) 和右值 (rvalue)”C 中的表达式可以分类:
- 左值 (lvalue) (Locator value): 代表内存中占用可识别位置的对象(如变量)。左值可以出现在赋值号的左边或右边。
- 右值 (rvalue) (Read value): 代表一个临时值,不一定有持久的内存位置(如字面量数字或表达式的结果)。右值可以出现在赋值号的右边,但不能出现在赋值号的左边。
变量是左值。
int score = 95; // 'score' 是左值,'95' 是右值字面量(如 10、3.14、‘A’)是右值。
10 = score; // 无效:不能给右值 (10) 赋值理解这种区别有助于掌握赋值规则和运算符行为。