《深入理解计算机系统》——Ch2-MemoryⅡ

2019-01-21  本文已影响0人  shijiatongxue

这一章继续学习内存。如何把C语言的变量存到内存,C语言中的指针和数组在内存的存取方式。

1 C语言中的&和*

第一次学习C语言是在数据结构课,当时老师说,

学过C语言不理解指针,相当于没学。

后来一次又一次听到类似的话,可以想象指针对于C语言的重要性。

如图,

这时,指针指向的是变量x,因为存取的是变量x的地址。

可以看出,这一步操作等于y=1+x,只不过这里是为了理解指针的作用,写的等价方式。

c_pointer.png

2 内存中的数组

在C语言中声明一个长度为6的整形数组,如图

int a[6];

其中,a是数组名,返回的是数组的地址。那么数组的地址又是什么呢?在C语言中,一个数组的地址就是它的第一个元素的地址,这里a=\&a[0]

array.png

a[0]进行赋值,a[5]等于a[0]

注意,一条赋值语句,左边为地址,右边为值或者地址值。

array_n_pointer.png

对于左下角框框的内容,是对地址进行算术运算,C语言会自动根据指针索引对象的大小进行运算。
如,p=p+2,这句话等价于,p=*p+sizeof(int)*2=0x10+4*2=16+8=24=0x18从下图可以看到,指针p所指的位置发生了变化。往后移动了2个整型数(4bytes)的大小。

array_n_pointer2.png
上一篇 下一篇

猜你喜欢

热点阅读