004预备知识-指针
1.指针的重要性
指针是C语言的灵魂。
2.定义
(1)地址:内存单元的编号。范围为0-FFFFFFFF(4G-1)。
地址线总共有32根.就可以访问2的32次方的空间,也就是4GB。
(2)指针
指针就是地址,地址就是指针。指针的本质是一个操作受限的非负整数。
(3)指针变量
存放内存单元地址的变量。
3.指针的分类
(1)基本类型的指针
根据对视频里例子的理解,我自己写了一个小程序,复习一下指针。
例1:
注意:*p等价于i,而不是等价于10。10只是当前时刻i的值而已。
扩充知识:内存
1.内存的基本概念
(1)内存是用来存储数据的设备,它的速度介于寄存器和硬盘之间。
(2)内存是CPU唯一可以访问的大容量的存储设备。所有硬盘中的数据必须先调入内存中,才能被CPU执行。
切记:CPU不能直接处理硬盘中的数据。
(3)内存的问题是软件开发中最核心的问题之一。如:内存的分配,内存的释放,什么时候分配,什么时候释放,由谁分配,由谁释放,在什么位置分配,访问权限如何……
2.软件运行和内存的关系
内存是在操作系统的统一管理下使用的。
(1)软件在运行前需要向操作系统申请存储空间。在内存空闲空间足够时,操作系统将分配一段内存空间并将外存中的软件拷贝到该内存空间中,并启动该软件的运行。
(2)在软件运行期间,该软件所占的内存空间不再分配给其他软件。
(3)当软件运行完毕,操作系统回收这段内存(注意:并不清空其中的数据),以便给其他软件使用。
综上所述:一个软件所分配的内存空间很可能遗留有其他软件运行时留下的数据,这些数据称为垃圾数据。所以通常情况下,我们要对一个变量,一个数组进行初始化!!!!
例2:
如何通过被调函数修改主调函数中变量的值?
a.实参为相关变量的地址,例子中&i;
b.形参为指针变量,指向的变量类型为相关变量的类型,例子中p的类型为int*;
c.在被调函数中利用*指针变量改变相关变量的值,例子中*p=25。
(2)指针和一维数组的关系
例3:
(1)一维数组名a指的是数组中第一个元素a[0]的地址;
(2)p[i]等价于*(p+i)等价于*(a+i)等价于a[i];