变量
什么是变量:
变量是程序可操作的存储区的命名……等等,我觉得还是不要再讲这个理论,我也表述不清楚,也自认为即使我表达的非常正确也没什么用,也没必要。讲这个概念起码需要200个字,每一个字我们都认识,但是连起来就不知所云了。所以直接上手写一个看看。
- 首先定义/声明这个变量为int类型,int类型是初学时最常用的类型。
int x;
- 那么x是什么呢?
- 我们用printf格式化输出一下x的值
printf(%d\n,x); \n相当于回车键,表示另起一行
为了方便,我这里用sublime编辑器,直接按Command + B编译并执行。
得到了一个非常奇怪的数,没有任何规律。再按一次Command + B
又得到了一个奇怪的数,没有任何规律。这是因为没有给这个变量做赋值/初始化的动作,执行时读到内存的哪个数就是哪个了,所以没有任何规律。所以在声明变量时,先来做一次初始化的动作。
初始化/赋值
int x = 10; /* 或者用这样的写法 int x; x = 10; */
int x = 10; 是在声明变量x的时候就做了初始化(initialization),让x所在的内存位置的值为0。
int x; x = 10;则是声明了变量(variable)x,并且给x做了一次赋值(assignment),让x所在的内存位置的值为0。
这里的等号,与数学算式中的等号不一样。这里的等号并不是算式符号,而是赋值符号。左右两边分别是是左值(lvalues)与右值(rvalues)。
变量是左值,因此可以出现在赋值号的左边。数值型的字面值是右值,因此不能被赋值,不能出现在赋值号的左边。下面是一个有效的语句:
int g = 20; //正确,将20这个数字指向G所在的内存位置。
但是下面这个就不是一个有效的语句,会生成编译时错误:
10 = 20; //不正确,没有意义
一个完整的初始化变量示例
#include <stdio.h> int main() { int x = 12346789; //初始化变量x,初始化值为12346789 printf("%d\n", x); //便于查看结果 return 0; //返回值 }
一个完整的对变量赋值示例
#include <stdio.h> int main() { int x; //声明变量x x = 12346789; //把12346789赋给x printf("%d\n", x); //便于查看结果 return 0; //返回值 }
那么对于变量做初始化与声明后赋值有什么区别呢?其实区别也不大,放在汇编里看一下
int a; a= 100; 0041137E mov dword ptr [a],64h int b = 100; 00411385 mov dword ptr [b],64h
初始化就是定义的时候赋值,生命期开始,赋值是生命期延续。
参考文献:
- https://zhidao.baidu.com/question/570423348.html
- https://www.runoob.com/cprogramming/c-variables.html
- https://bbs.csdn.net/topics/250053986
超纲交流:
- 有没有哪些更规范的写法,至少在只声明变量而不做初始化/赋值时,不会乱出结果。
- 编译器对10 = 20;语句的判断是warning还是error?为什么?
上一篇:C语言学习第三节-数据类型
版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
分类:C语言
标签:
发表于2020-04-04 12:26 沙发
一、int main(int argc, char *argv[])
二、error:expression isn’tassignable