思维导图
变量介绍
变量是用来保存、操作数据的命名空间,因为存入的数据是可以变化的,故叫做变量。
在C语言中,变量需要先定义,然后才能使用
声明变量
变量的声明是为了让编译器知道该变量的存在,并为其分配内存空间
变量声明,需要指定变量的数据类型和变量名,但不一定需要赋值
格式:数据类型 变量名
例如,声明一个整型变量a:
int a;
本质:向内存申请一块空间(大小有数据类型决定),规定只能存放相应类型的数据,并命名,便于随时使用
变量的命名
以字母 A-Z 或 a-z 或下划线 _ 开始
后跟零个或多个字母、下划线_和数字(0-9)
区分大小写
不允许出现其他标点字符,比如 @、$ 和 %
不允许使用关键字。因为关键字已有特定的含义,不能当作标识符使用
变量分类
一个变量需要考虑其作用域和生命周期
变量的作用域决定了变量在程序中可见的范围
变量的生命周期指的是变量从被创建出来到被销毁的整个时间范围
根据作用域:全局变量和局部变量
根据生命周期:静态变量和动态分配变量
全局变量:
在所有函数之外声明的变量称为全局变量
作用域:全局变量在整个程序(工程)中都是可见的,可以被任何函数访问和修改
生命周期:从程序开始到程序结束
#include <stdio.h> int global; // 全局变量声明 int main() { global = 10; // 全局变量赋值 printf("Global variable: %d\n", global); return 0; }
局部变量:
在函数内部或者方括号{}代码块中声明的变量称为局部变量
作用域:局部变量只在声明它的函数或代码块中可见
生命周期:它的生命周期只在代码块的执行期间有效
if (1) { int num = 20; //num是局部变量 } num = 30; //外面不能访问if代码块中局部变量num
形式参数:是定义在函数签名中的变量,用于接收调用函数时传递的实际参数的值。形式参数也属于局部变量,只在函数内部可见
#include <stdio.h> void addNumbers(int num1, int num2) // 形式参数声明 { int sum = num1 + num2; // 局部变量sum声明和赋值 printf("Sum: %d\n", sum); } int main() { int a = 10, b = 20; addNumbers(a, b); // 调用函数,传递实际参数 return 0; }
静态变量:
静态变量分为静态全局变量和静态局部变量
静态全局变量:
在所有函数之外声明的同时使用static关键字声明的变量称为静态全局变量。
作用域:静态全局变量的作用域只限于声明它的源文件,其他文件无法直接访问静态全局变量。
生命周期:同普通全局变量
#include <stdio.h> static int staticGlobalVar; // 静态全局变量声明 int main() { staticGlobalVar = 30; // 静态全局变量赋值 printf("Static global variable: %d\n", staticGlobalVar); return 0; }
静态局部变量:
在函数内部使用static关键字声明的局部变量称为静态局部变量。
作用域:同普通局部变量,仅限声明它的代码块内部使用
生命周期:静态局部变量与普通局部变量相比,它们的生命周期更长,不会在函数执行完毕后被销毁,下次调用函数时还能保持其值不变
#include <stdio.h> void increment() { static int count = 0; // 静态局部变量声明和赋值 count++; // 1 2 3 printf("Count: %d\n", count); } int main() { increment(); increment(); increment(); return 0; }
动态分配变量
通常是通过使用动态内存分配函数(例如malloc()、calloc()或realloc())来创建的
动态分配的变量是在堆上分配内存空间的变量,它们的生命周期由程序员控制
作用域同普通变量,看定义位置
int* num = (int *)malloc(sizeof(int)); *num = 10;
变量的使用
变量的访问:可以通过变量名来访问变量的值,例如可以通过
a
来获取变量a的值。变量的赋值:可以使用赋值运算符’='将一个值赋给变量,例如
a = 10;
表示将值10赋给变量a。变量的使用:可以在程序中使用变量来存储和操作数据。例如
int b = a + 5;
表示将变量a的值加上5,并将结果赋给变量b。