这一章继续学习内存。如何把C语言的变量存到内存,C语言中的指针和数组在内存的存取方式。
1 C语言中的&和*
第一次学习C语言是在数据结构课,当时老师说,
学过C语言不理解指针,相当于没学。
后来一次又一次听到类似的话,可以想象指针对于C语言的重要性。
- & = 取地址运算符
- * = 取值运算符,或者称为解引用。
如图,
- 我们首先声明一个指向整形数的指针;
- 声明两个变量,分别初始化为和;
- 对变量进行取地址操作,然后赋值给指针;
这时,指针指向的是变量,因为存取的是变量的地址。
- 最后,对进行解引用,取出所引地址的存取的值。然后进行算术运算,得到。
可以看出,这一步操作等于,只不过这里是为了理解指针的作用,写的等价方式。
2 内存中的数组
在C语言中声明一个长度为的整形数组,如图
int a[6];
其中,是数组名,返回的是数组的地址。那么数组的地址又是什么呢?在C语言中,一个数组的地址就是它的第一个元素的地址,这里。
对进行赋值,等于。
- 声明一个指针;
- ,并给指针赋值,这个值就是数组的地址,从图中可以看出来,这句赋值语句和是等价的;
- 最后,,这句话的意思就是对指针所引的地址赋值。
注意,一条赋值语句,左边为地址,右边为值或者地址值。
array_n_pointer.png对于左下角框框的内容,是对地址进行算术运算,C语言会自动根据指针索引对象的大小进行运算。
如,,这句话等价于,从下图可以看到,指针所指的位置发生了变化。往后移动了个整型数(4bytes)的大小。
网友评论