1、内存地址

1、内存含义

  • 存储器:计算机的组成中,用来存储程序和数据,辅助CPU进行运算处理的重要部分。
  • 内存:内部存贮器,暂存程序/数据——掉电丢失 SRAM、DRAM、DDR、DDR2、DDR3。
  • 外存:外部存储器,长时间保存程序/数据—掉电不丢ROM、ERRROM、FLASH(NAND、NOR)、硬盘、光盘。

2、内存是沟通CPU与硬盘的桥梁

  • 暂存放CPU中的运算数据
  • 暂存与硬盘等外部存储器交换的数据

3、物理存储器和存储地址空间

  • 有关内存的两个概念:物理存储器和存储地址空间

4、物理存储器:实际存在的具体存储器芯片

  • 主板上装插的内存条
  • 显示卡上的显示RAM芯片
  • 各种适配卡上的RAM芯片和ROM芯片

5、存储地址空间:对存储器编码的范围。我们在软件上常说的内存是指这一层含义

  • 编码:对每个物理存储单元(一个字节)分配一个号码
  • 寻址:可以根据分配的号码找到相应的存储单元,完成数据的读写

6、内存地址

  • 将内存抽象成一个很大的一维字符数组。
  • 编码就是对内存的每一个字节分配一个32位或64位的编号(与32位或者64位处理器相关)。
  • 这个内存编号我们称之为内存地址。

7、内存中的每一个数据都会分配相应的地址

  • char:占一个字节分配一个地址
  • int: 占四个字节分配四个地址
  • float、struct、函数、数组等

C语言 指针

2、指针变量

一、概述

  • 内存区的每一个字节都有一个编号,这就是“地址”。
  • 如果在程序中定义了一个变量,在对程序进行编译或运行时,系统就会给这个变量分配内存单元,并确定它的内存地址(编号)
  • 指针的实质就是内存“地址”。指针就是地址,地址就是指针。
  • 指针是内存单元的编号,指针变量是存放地址的变量。
  • 通常我们叙述时会把指针变量简称为指针,实际他们含义并不一样。

C语言 指针

二、数据存储格式

注:windos电脑在做数据存储时采用小端对齐。

注:Linux 电脑在做数据存储时采用大端对齐。

三、定义说明

  • 指针也是一种数据类型,指针变量也是一种变量
  • 指针变量指向谁,就把谁的地址赋值给指针变量
  • “*”操作符操作的是指针变量指向的内存空间

注意:&可以取得一个变量在内存中的地址。但是,不能取寄存器变量,因为寄存器变量不在内存里,而在CPU里面,所以是没有地址的。
注意:&是取地址符号是升维度的、*是取值符号是将维度的。
注意:在定义指针类型一定要和变量的类型对应上。

四、案例

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main(void)
{
    // 定义指针变量存储变量地址
    int a = 10;
    // 指针类型:数据类型*
    int* p;
    p = &a;
    // 通过指针间接改变变量的值
    *p = 100;
    printf("%p\n", &a);
    printf("%p\n", p);
    printf("%d\n", a);
    printf("%d\n", *p);
    return 0;
}
指针变量 使用案例:int类型指针修改值

相关文章: