Bootstrap

C语言笔记第七天(指针)

目录

指针概述

指针的取值范围(步长)

 指针+1


指针概述

#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 = &num;

	//他们两个输出的结果是一样的
	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,同样不会改变地址