初识指针、初始结构体学习小结
一、内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。
![image-20220411152543927](https://gitee.com/zhonghuafuxing/csdn-picture/raw/master/img/202204111525981.png)
对于32位计算机来说,一共拥有32根地址线,即“1”或“0”的交替显示。(电信号转换成数字信息,即二进制序列)
例如:
![image-20220411153541661](https://gitee.com/zhonghuafuxing/csdn-picture/raw/master/img/202204111535716.png)
2的32次方个序列每一个对应一个内存单元,2的32次方转换为十进制为:4,294,967,296
![image-20220411153931077](https://gitee.com/zhonghuafuxing/csdn-picture/raw/master/img/202204111539134.png)
一个内存单元所占大小是一个字节,即1Byte。
4,294,967,296 byte = 4,194,304 kb = 4,096 mb = 4 gb 因此一个32位计算机可以存储4gb 的内存。
同理可以计算出64位机器的内存。
二、指针
(一)为何要用指针;指针有什么作用
有上面可知,一个内存单元占据一个字节,如果初始化一个变量 ‘a’,那它会占据4个内存单元。
#include <stdio.h>
int main()
{
int a = 1;
printf("%zu", sizeof(a));
return 0;
}
![image-20220411165501930](https://gitee.com/zhonghuafuxing/csdn-picture/raw/master/img/202204111655963.png)
地址以十六进制表示,‘a’ 一共对应四个字节,但是以第一个数字为a的序号,a的四个字节对应的每一个都有对应数:
![image-20220411165948126](https://gitee.com/zhonghuafuxing/csdn-picture/raw/master/img/202204111659159.png)
那么如何打印出‘a’的地址呢:
这里需要用到“%p”作为取地址的符号:
#include <stdio.h>
int main()
{
int a = 1;
printf("%p", &a); //不同编译器,不同时期打印结果不同
return 0;
}
![image-20220411170245127](https://gitee.com/zhonghuafuxing/csdn-picture/raw/master/img/202204111702173.png)
那么如果想让"&a"存起来该如何呢?
// P = &a; 这一步是把&a存放在P里。
// 那P的类型是什么呢? P里装的是地址