目录
指针概述
#include <stdio.h>
int main()
{
//物理内存:真是的内存
//虚拟内存:系统虚拟的内存(映射)
//指针操作的时虚拟内存(大部分情况下)
//32位系统的寻址范围 0x00 00 00 00 到 0xff ff ff ff(一个十六进制四位,两个十六进制一字节)
// 32/8=4 一字节8位 32位也就是四个字节,指针大小的由来
//0xff ff ff ff也就是32位最大的寻址,换算下来差不多4G,这也是32位系统内存即使大于4G也用不到的原因
//计算机是以字节为单位存储的
//总的来说内存地址就是指针,指针就是内存地址
//变量num存储的是10
int num = 10;
//变量p存储的是num的地址
//变量p存储的是num的首地址
//int(四字节)决定这个指针的取值范围(也叫指针的步长),类型决定解析方式
int* p = #
//他们两个输出的结果是一样的
printf("&num = %p\n", &num);
printf("p = %p\n", p);
//可以使用*(解引用运算符)来取出地址内的数据
printf("*p = %d\n", *p); //10 p存的是num的地址,*p就是按照p所存的地址去找到数据
//将指针p解引用后赋值可以改变num,但是不会改变地址
*p = 20;
printf("num = %d\n", num);
printf("*p = %d\n", *p);
printf("&num = %p\n", &num);
printf("p = %p\n", p);
//将num赋值可以改变*p,同样不会改变地址