AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
# 1.2 变量 **变量**是提供给程序可操作存储区的名称。 > A variable provides us with named storage that our programs can manipulate. ## 变量定义 **变量定义**由变量类型和变量名称两部分组成: * 变量类型决定了变量存储的大小和布局; * 变量的名称可以由字母、数字和下划线字符组成,它必须以字母或下划线开头,并且大小写敏感; ## 变量初始化 **初始化**指一个对象在创建时被赋予特定值。 初始化和赋值的区别: * 初始化是在变量创建时赋予变量一个初始值; * 赋值操作是指用一个新的值替换变量的当前值; > Initialisation is not assignment. Initialization happens when a variable is given a value when it is created. Assignment obliterates an objects's current value and replaces that value with a new one. ``` int units_sold = 0; int units_sold = {0}; int units_sold{0}; // cannot to initilse built-in type by list initialisation int units_sold (0); ``` 带有静态存储持续时间的变量会被隐式初始化为 NULL(所有字节的值都是 0),其他所有变量的初始值是未定义的。 ## 变量声明 **变量声明**向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量定义。 ``` extern int i; // 声明 但是不定义 i int j; // 声明 & 定义 k extern int k = 1; // 声明 & 定义 k ``` 一个变量必须被定义一次且只有一次,但可以被声明多次。 ## 变量作用域 作用域指程序的一个区域,变量的作用域通常指可以使用该变量的代码区域。根据作用域可以将变量划分成全局变量和局部变量。 [Reference: runoob-C++变量作用域](https://www.runoob.com/cplusplus/cpp-variable-scope.html) 变量在离开其作用域的时候会自动调用析构函数: ``` c++ class Scope { public: Scope(const char* p) { scope_name = p; printf("start scope %s\n", scope_name); } ~Scope() { printf("finish scope %s\n", scope_name); } private: const char* scope_name; }; int main () { Scope m("main"); { Scope r("region"); } printf("before end program\n"); return 0; } // output: // start scope main // start scope region // finish scope region // before end program // finish scope main ```