变量名和字面量
因为前几天有个同学让我给他讲一下关于指针的问题,讲了半天感觉总像是没有吧问题讲透的感觉,所以就想着把有关指针方面的再稍微写的易懂一点,因为不少同学总是认为,int a = 10; 是把10存到了a这个变量里面去了,这就是我们为什么用C语言来写代码而不用编译语言,甚至是机器语言来写了。
因为我们想通过自己分配的这个变名来操作内存空间,倘若a就是内存空间的话那么我们对其取地址的话,那么地址也就是a,但是很明显地址并不是a,所以变量只是地址的一个门牌号,通过门牌号可以找到地址,比如你的家就是可操作的内存空间,你家的地址都写在了门牌号上面,所以其他人才可以通过门牌号找到你的家,也就是说如果有人不知道你的门牌号,但是它知道你家的地址,那么他也可以直接来到你的家里,这就是为什么我们可以直接通过内存编号来直接操作内存空间的原因;
那么下面我还是还是画了一张图来表示他们之间的关系:
在上面这张图里我们可以看到我并没有把变量名a,b,i放到栈区,因为分配的内存空间是用来储存数据的,而不是把数据储存到变量名中了;要说他们被储存在哪,代码区代码区肯定是存放代码的啊!
只要字面量就是int i = 0;中的0, i < 4 的4,这些都是字面量,字面量是无法取空间地址的,就如同字面意思一样,只是字面表达的意思,而且它和“abcd”字符串常量不一样,字符串常量是分配在全局区的;于是字面量又是分配在哪个区的呢?其实关于这个分区问题,比如在编译语言方面分的特别细致,因为我没有主攻这一方面所以也就没怎么细看,但是在我们C语法中普遍认为是四个区,但是我看资料上也有分了五个区的,还有一个字面量区,还有说是分配在全局区的,因为在C中普遍认为是四个区,所以很多人认为是放在了代码区,我个人感觉将它放在这个区也比较合理,可能编译中对这个分的更细,有兴趣的可以去查找一下。