内存的作用(内存储器):
- 内存是沟通cpu和硬盘的桥梁
- 暂存放CPU中的运算数据
- 暂存与硬盘等外部存储器交换的数据
有关内存的两个概念:
物理内存:实实在在存在的存储设备
虚拟内存:操作系统虚拟出来的内存
在32位系统下,每个进程(运行着的程序)的寻址范围是4G,0x00 00 00 00 ~ 0xff ff ff ff
在写应用程序的,咱们看到的都是虚拟地址
在运行程序的时候,操作系统会将 虚拟内存进行分区
- 堆:在动态申请内存的时候,在堆里开辟内存
- 栈:主要存放局部变量(在函数内部,或复合语句内部定义的变量)。
- 静态全局区
1):未初始化的静态全局区:
静态变量(定义的时候,前面加static修饰),或全局变量,没有初始化的,存在此区
2):初始化的静态全局区
全局变量、静态变量、赋过初值的,存放在此区
4.代码区:存放咱们的程序代码
5.文字常量区:存放常量的。
内存以字节为单位储存数据的,咱们可以将程序中的虚拟寻址空间,看成一个很大的一维字符数组
【内存地址的概述】
系统给内存的每一个字节 分配一个编号,而这个编号 就是内存地址
内存地址 也叫 指针。
操作系统给每个存储单元分配一个编号,
从0x00 00 00 00 ~ 0xff ff ff ff
这个编号咱们称之为地址
指针就是地址
指针变量:是个变量,是个指针变量,即这个变量用来存放一个地址编号,在32位平台下,地址总线是32位的,所以地址是32位编号,所以指针变量是32位的即4个字节
#include<stdio.h>
void test01()
{
printf("%d\n",sizeof(char *));//4字节
return;
}
int main(int argc,char *argv[])
{
test01();
return 0;
}
如何定义指针变量(重要)
定义指针变量的步骤
- *修饰 指针变量名
- 保存什么类型变量的地址 就用该类型定义一个普通变量。
- 从上往下 整体替换
定义指针变量(前提):
明确保存啥类型变量的地址
#include<stdio.h>
void test02()
{
//num拥有一个合法的空间
int num = 10;
//需求:请定义一个指针变量,保存num的地址
//p就是指针变量 变量名为p 不是*p
//在定义的时候:*修饰p,表示p为指针变量
int *p;
//建立p和num的关系:p保存num的地址
p = # //&num 取num变量的起始地址(首地址)
printf("&num = %p\n",&num);
printf("p = %p\n",p);
}
int main(int argc,char *argv[])
{
test02();
return 0;
}
运行结果:&num = 0019FED8
p = 0019FED8
Press any key to continue
【指针变量的使用】通过p 对所保存的地址空间 进行读写操作
在使用中:
int num = 10; int *p;
*p表示取p所保存的地址编号 对于的空间内容。指针变量p的解引用。
*p等价num
|