C语言 Day10
初始指针
内存
内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的
所以为了有效地使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址
内存可以类比成现实生活中的空间,如果想要找到一个地方,我们就需要知道对应的地址
此时有两个问题
1.内存是怎么编号的
2.一个这样的内存单元会占用多大的空间
1.内存是怎么编号的
在讨论计算机是会考虑计算机时32位还是64位
二者指的是什么意思
32位 - 32根地址线 - 物理线 - 通电 - 1/0
64位 - 64根地址线 - 物理线 - 通电 - 1/0
再通过电信号转换成数字信息:1和0组成的二进制序列
如果是32位
经过排列组合会有2^32次方个序列,这些序列都可以作为内存编号,而这些编号就可以被称为内存单元的地址
2.一个内存单元会占用多大的空间
我们可以通过假设法来猜测下
在32位操作系统下,已知可以有2的32次方
个内存单元 ,也就是4,294,967,296
个,假设每个单元占用1bit
,那么经过转换,就会占用0.5GB的内存,管理的空间就会很小,而且一个bit就给一个地址,那么占用1个byte的char就会有8个bit也就是8个地址,太过于详细
经过研究讨论后,发现一个内存单元占用1个Byte是最好不过的
1 | int main() |
当我们想要知道a存储的地址时,可以选择 F10 - 调试 - 窗口 - 内存/监视,为了方便观察可以将列改成4
1 | int main() |
当我们知道a
的地址之后,也是为了方便以后能够快速的找到a
1 | int main() |
结果是20
指针变量的空间大小
1 | int main() |
发现结果都是一样的
为什么呢?
因为指针是用来存放地址的,所以指针的空间大小取决于地址的存储需要多大空间
但是这个结果会因为计算机的位数不同而不同
32位 32bit - 4byte - 一个地址
64位 64bit - 8byte - 一个地址
初识结构体
结构体是C语言中特别重要的知识点,结构体是的C语言有能力描述复杂类型
几条狗提也可以让C语言创建新的类型出来
1 | //创建一个学生 |