环保类网站模板,大金seo,电商设计招聘,网络营销推广外包平台目录 1.变量名2.变量声明3.变量赋值4.变量作用域 1.变量名
本篇原文为#xff1a;C语言变量的基础概念与使用
更多C进阶、rust、python、逆向等等教程#xff0c;可点击此链接查看#xff1a;酷程网
变量#xff08;variable#xff09;可以理解成一块内存区域的名字。… 目录 1.变量名2.变量声明3.变量赋值4.变量作用域 1.变量名
本篇原文为C语言变量的基础概念与使用
更多C进阶、rust、python、逆向等等教程可点击此链接查看酷程网
变量variable可以理解成一块内存区域的名字。通过变量名可以引用这块内存区域获取里面存储的值。由于值可能发生变化所以称为变量否则就是常量了。
变量名在 C 语言里面属于标识符identifier命名有严格的规范。
只能由字母包括大写和小写、数字和下划线_组成。不能以数字开头。长度不能超过63个字符。
下面是一些无效变量名的例子。
$zj
j**p
2cat
Hot-tab
tax rate
dont上面示例中每一行的变量名都是无效的。
变量名区分大小写star、Star、STAR都是不同的变量。
并非所有的词都能用作变量名有些词在 C 语言里面有特殊含义比如int另一些词是命令比如continue它们都称为关键字不能用作变量名。另外C 语言还保留了一些词供未来使用这些保留字也不能用作变量名。下面就是 C 语言主要的关键字和保留字。 auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, inline, int, long, register, restrict, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while 另外两个下划线开头的变量名以及一个下划线 大写英文字母开头的变量名都是系统保留的自己不应该起这样的变量名。
2.变量声明
C 语言的变量必须先声明后使用。如果一个变量没有声明就直接使用会报错。
每个变量都有自己的类型type。声明变量时必须把变量的类型告诉编译器。
int height;上面代码声明了变量height并且指定类型为int整数。
如果几个变量具有相同类型可以在同一行声明。
int height, width;// 等同于
int height;
int width;注意声明变量的语句必须以分号结尾。
一旦声明变量的类型就不能在运行时修改。
3.变量赋值
C 语言会在变量声明时就为它分配内存空间但是不会清除内存里面原来的值。这导致声明变量以后变量会是一个随机的值。所以变量一定要赋值以后才能使用。
赋值操作通过赋值运算符完成。
int num;
num 42;上面示例中第一行声明了一个整数变量num第二行给这个变量赋值。
变量的值应该与类型一致不应该赋予不是同一个类型的值比如num的类型是整数就不应该赋值为小数。虽然 C 语言会自动转换类型但是应该避免赋值运算符两侧的类型不一致。
变量的声明和赋值也可以写在一行。
int num 42;多个相同类型变量的赋值可以写在同一行。
int x 1, y 2;注意赋值表达式有返回值等于等号右边的值。
int x, y;x 1;
y (x 2 * x);上面代码中变量y的值就是赋值表达式x 2 * x的返回值2。
由于赋值表达式有返回值所以 C 语言可以写出多重赋值表达式。
int x, y, z, m, n;x y z m n 3;上面的代码是合法代码一次为多个变量赋值。赋值运算符是从右到左执行所以先为n赋值然后依次为m、z、y和x赋值。
C 语言有左值left value和右值right value的概念。左值是可以放在赋值运算符左边的值一般是变量右值是可以放在赋值运算符右边的值一般是一个具体的值。这是为了强调有些值不能放在赋值运算符的左边比如x 1是合法的表达式但是1 x就会报错。
4.变量作用域
作用域scope指的是变量生效的范围。C 语言的变量作用域主要有两种文件作用域file scope和块作用域block scope。
文件作用域file scope指的是在源码文件顶层声明的变量从声明的位置到文件结束都有效。
int x 1;int main(void) {printf(%i\n, x);
}上面示例中变量x是在文件顶层声明的从声明位置开始的整个当前文件都是它的作用域可以在这个范围的任何地方读取这个变量比如函数main()内部就可以读取这个变量。
块作用域block scope指的是由大括号{}组成的代码块它形成一个单独的作用域。凡是在块作用域里面声明的变量只在当前代码块有效代码块外部不可见。
int a 12;if (a 12) {int b 99;printf(%d %d\n, a, b); // 12 99
}printf(%d\n, a); // 12
printf(%d\n, b); // 出错上面例子中变量b是在if代码块里面声明的所以对于大括号外面的代码这个变量是不存在的。
代码块可以嵌套即代码块内部还有代码块这时就形成了多层的块作用域。它的规则是内层代码块可以使用外层声明的变量但外层不可以使用内层声明的变量。如果内层的变量与外层同名那么会在当前作用域覆盖外层变量。
{int i 10;{int i 20;printf(%d\n, i); // 20}printf(%d\n, i); // 10
}上面示例中内层和外层都有一个变量i每个作用域都会优先使用当前作用域声明的i。
最常见的块作用域就是函数函数内部声明的变量对于函数外部是不可见的。for循环也是一个块作用域循环变量只对循环体内部可见外部是不可见的。
for (int i 0; i 10; i)printf(%d\n, i);printf(%d\n, i); // 出错上面示例中for循环省略了大括号但依然是一个块作用域在外部读取循环变量i编译器就会报错。