计算机的一个重要思想是存储程序的概念。即把程序加载到内存中。
计算机的一个重要作用是数据处理。变量是内存中的一个具有特定大小的连续的存储区。为了区分不同的数据和合理的利用有限的内存,定义数据类型为所占用的内存单元的大小。内存单元通常以字节为最小单位(1个字节等于8位)。例如,即使bool类型只有两个值:0和1,只需要一个bit就可以表示,但是在内存中存储时占用的内存单元为1个字节。所以,bool类型可以把0表示false,非0值表示为true。
类型定义变量所占内存中连续存储区的大小。我们还需要知道变量的值和变量的存储位置(地址)。
考虑到我们并不关心变量的存储位置和为了方便我们操作,使用变量名标识这一个内存单元。并且在实际使用中,通常变量的值对我们有用,所以默认给变量赋值和变量输出时,操作的都是变量的值。
也就是说,所有的变量默认操作的都是变量的值。我们通过变量的名字,可以使用这个内存空间中的值。
例如,int a =1 , b=2;这都是让a和b标识的内存单元的值为1和2;printf("%d",a);输出的也是a的值。
其实,对于程序来说,a和b就是变量的内存的地址,只不过是为了让程序员方便使用,才这样弄的。
而我们在赋值的时候,是操作变量的值,这就是程序语言为了方便操作而做的封装。
同样,指针变量也是一样,指针变量赋值和输出的,都是指向的地址值,而不是指针变量所在的内存单元的地址。
变量是既有大小、值又有内存地址属性。上面讨论了变量的大小和值,下面讨论变量的地址。
变量的存储位置是我们在定义变量时向操作系统申请,并由操作系统返回的。
由于默认的是变量的值,所以定义了取地址运算符&,获取变量的地址。
地址也是一种类型,所以采用指针变量保存。
有了地址,我们也可以间接的获取此变量的值。这就是间接引用。
定义*为内存地址中存储的值。
这种形式在函数的使用中比较有意义。例如,交换两个变量的值。如果是按值传递,则两个变量的值不变。
如果是按地址传递,则可以成功的交换两个变量的值。这也就是为啥要弄个取地址运算吧。