精华内容
下载资源
问答
  • 因为内存的存储空间是连续的,所以,内存字节的地址编号也是连续的,并用二进制或十六进制数来表示; 在内存中,每个变量都有自己的存储单元,不同类型的变量占用的存储单元空间大小不一样; 对于多字节变量来说,在内存中...

    计算机中的内存是以字节为单位的连续的存储空间,每个字节都有一个唯一的编号,这个编号就称为内存地址;

    因为内存的存储空间是连续的,所以,内存字节的地址编号也是连续的,并用二进制或十六进制数来表示;


    在内存中,每个变量都有自己的存储单元,不同类型的变量占用的存储单元空间大小不一样;

    对于多字节变量来说,在内存中是按照"高高低低"的规则存放的,

    即:高字节存放在高地址内存单元中,低字节存放在低地址内存单元中;

     

    而变量的地址就是其所占用存储单元的最低字节的内存地址,即:该变量所占用存储单元的第一个字节的地址;


    计算机处理内存中的变量(内存单元)时,都是从最低地址向高地址方向处理的;


    对变量进行处理,也就意味着对内存单元进行处理;

    转载于:https://www.cnblogs.com/lifan3a/articles/4994002.html

    展开全文
  • 内存地址的分配

    2016-05-04 08:29:00
    在典型32位平台上,可以把内存空间看成是由很多个连续小房间构成,每个房间就是一个小存储单元,大小是1...为了方便找到住在这些房间中数据,房间就需要按照一定的规则编号,这个编号,就是通常所说的内存地...

    在典型的32位平台上,可以把内存空间看成是由很多个连续的小房间构成的,每个房间就是一个小存储单元,大小是1个字节,房间中住着数据。有的数据比较小,比如一个char类型的字符,它只需要一个房间就够了。而有的数据比较大,就需要占用好几个房间,比如一个int类型的整数,其大小是4个字节,需要4个房间才可以安置。为了方便找到住在这些房间中的数据,房间就需要按照一定的规则编号,这个编号,就是通常所说的内存地址。这些编号是用一个32位的二进制数来编码的,比如0x7AE4074B、0xFFFFFFFF等,如图3-6所示。一旦知道某个数据的房间编号,就可以通中的数据进行存取操作。

    转载于:https://www.cnblogs.com/sjxbg/p/5457170.html

    展开全文
  • 内存单元按一定的规则编号,这个编号就是存储单元的地址。 变量与内存地址 程序中定义的变量要占用一定的内存空间,不同的数据类型的变量占用的内存空间大小不一样。 访问内存中的数据 从内存单元中访问数据的...

    相关博客目录

    C++程序设计基础学习笔记:(1)初识C++语言:从认识变量和常量开始,数据的表示
    C++程序设计基础学习笔记:(2)计算:从数据运算开始,数据简单运算
    C++程序设计基础学习笔记:(3)分支结构:无处不在的抉择
    C++程序设计基础学习笔记:(4)循环结构:周而复始,求同存异
    C++程序设计基础学习笔记:(5)数组:实现算法的利器
    C++程序设计基础学习笔记:(6)指针:所向披靡的“金箍棒” 魂
    C++程序设计基础学习笔记:(7)函数:面向过程的基础
    C++程序设计基础学习笔记:(8)文件:让数据流动起来
    C++程序设计基础学习笔记:(9)以人为本:用类与对象诠释现实世界
    C++程序设计基础学习笔记:(10)从生物遗传说起,取其精华——继承与多态

    第6章 指针:所向披靡的“金箍棒” 魂

    6.1 指针概述及基本应用

    内存地址

    计算机的内存被划分为一个个的存储单元,简称内存单元。

    内存单元按一定的规则编号,这个编号就是存储单元的地址。

    image-20210402095727924

    变量与内存地址

    程序中定义的变量要占用一定的内存空间,不同的数据类型的变量占用的内存空间大小不一样。

    访问内存中的数据

    从内存单元中访问数据的方法有两种:直接访问和间接访问。

    直接访问

    通过变量名,直接对变量的存储单元进行存取访问。

    定义变量后,该变量名也就成为了相应内存空间的名称,表现在程序语句中就是通过变量名来存取变量内容。

    间接访问

    根据变量的地址进行存取访问。

    指针变量与指针变量的定义

    指针变量是一种特殊的变量,用于存放内存单元的地址,即能存放地址的变量就是指针变量。

    指针变量定义的一般格式如下:

    数据类型 *指针变量名;
    

    定义语句中的“*”表示该变量为指针变量。

    指针变量前的数据类型规定了指针变量指向的变量的数据类型。

    例如:double *p;
    定义变量p为指针变量,且指针变量p的值只能是一个double类型变量的地址。

    指针变量的三个要素

    变量名:与一般变量取名相同,由英文字符开始。

    指针变量的类型:指针所指向的变量的类型,而不是自身的类型。指针变量本身均为long int类型;

    指针变量的值:是某个变量的内存地址。

    地址运算符:&

    取地址运算符&,是一个一元运算符,用来得到一个变量的地址。

    image-20210402100337212

    例如int a;
    &a表示变量a在内存中的起始地址。&后面必须是一个变量。

    指针运算符 ‘’*’’

    指针运算符* 是一个一元运算符,表示指针变量所指向的变量的值(取值),需要跟一个指针类型的变量。(这就是间接访问的形式)
    注意*在不同地方出现的含义是不同的。

    image-20210402100502924

    指针变量的初始化与赋值

    在定义初始化时赋值:

    数据类型 *指针名=地址
    

    指针赋值:

    指针变量=地址;
    

    其中的“地址”可以是变量的地址、数组名等。

    image-20210402100926909

    指针赋值注意事项

    不能把常量或表达式赋给指针变量。p=&67;p=&(i+5)是非法的

    不能将一个整数赋给指针变量,但可以赋整数值0,0是可以直接赋给指针变量的唯一整数值,表示空地址

    image-20210402101332080

    6.2 指针和一维数组

    image-20210402101543733

    指针与一维数组

    数组名表示数组的首地址,即数组第一个元素的地址

    数组名是地址常量不可以更改

    数组名加上整型实数可以实现数组其他元素的取用a+1是a[i]的地址

    可以使用数组首地址作为指针信息给指针变量赋值

    image-20210402102632216

    数组取用有两种方式:下标表示(前面已经讲过),指针表示

    a[i] (直接访问) <=> *(a+i) (间接访问)

    image-20210402102613456

    指针的算术运算与比较运算

    算数运算和比较运算的组合可以很容易完成指针对于数组的遍历循环

    p++后,p指针指向的地址->下一个下标对应的地址

    p–后,p指针指向的地址->上一个下标对应的地址

    若有语句int*p1=&a[1], *p2=&a[4];p2-p1的意义两指针之间的数据个数

    p1与p2可以比较大小

    举例:求两个集合的交集

    image-20210402103134277

    image-20210402103919073

    6.3.1指针和二维数组

    image-20210405102623014

    二维数组与行指针与列指针

    从逻辑上看有行列的关系,但是存在于计算机中还是线性存储

    举例:int a[3][4];

    对于二维数组a:
    a是数组名,包含三个元素a[0], a[1], a[2]
    每个元素a[i],又是一个一维数组,包含4个元素;
    二维数组具有二级地址的含义

    a-----行地址,数组的首地址,第0行首地址
    a+i-----行地址,第i行的首地址
    a[i] <=>*(a+i)----列地址,第i行第0列的元素地址

    所以称a+i 为行指针

    a[i]+j <=>*(a+i)+j—列地址,第i行第j列的元素地址
    *(a[i]+j) <=>*(*(a+i)+j) <=>a[i][j] 第i行第j列元素值

    所以称*(a+i)+j 为列指针

    image-20210405095931942

    image-20210405100614468

    指向二维数组单个元素的指针变量:列指针

    image-20210405101800014

    指向二维数组中一维数组的指针变量:行指针


    image-20210405102537486

    6.3.2 指针和二维数组应用

    背景

    image-20210405102650323

    数学模型

    image-20210405104323473


    image-20210405104348021

    代码

    6.4 指针数组

    image-20210405104446365

    指针数组定义

    数据类型 *数组名[数组长度说明];
    例
        int *p[4];
    

    指针数组赋值与初始化

    指针数组赋值

    image-20210405104802795

    image-20210405104916850

    指针数组初始化

    image-20210405105021179

    image-20210405104916850

    image-20210405105211961

    image-20210405105419878

    二维数组与指针数组区别

    image-20210405105539789

    用指针数组处理二维数组

    image-20210405111334878

    指针数组与数组指针的区别

    语法形式:

    指针数组int *a[10];
    数组指针int(*p)[10];

    实际含义:

    指针数组是指一个数组里面装着指针,也即指针数组是一个数组;
    数组指针是一个指向数组的指针,本质上还是一个指针,只不过指向数组而已;

    对字符串排序(简单选择排序按字典顺序从小到大排序)

    在内存中并没有改变

    改变的是指针数组中每个指针对应的位置上

    image-20210405112450861

    image-20210405140506255

    6.5 多级指针、动态存储分配

    多级指针(二级指针)

    定义: 指向指针的指针

    一级指针:指针变量中存放目标变量的地址

    image-20210405140757231

    二级指针:指针变量中存放一级指针变量的地址

    image-20210405140908513

    举例:用二级指针处理字符串

    image-20210405141127518

    二级指针与指针数组的关系

    int **pint *q[10]

    指针数组名q是二级指针常量,q[i]是指针变量;

    如果执行p=q;p+iq[i]的地址;

    系统只给p分配能保存一个指针值的内存区;而给q分配10块内存区,每块可保存一个指针值;

    动态存储分配

    分配

    动态存储分配: 程序需在运行时根据需要分配相应大小的存储空间。

    动态分配内存的格式如下:

    指针变量名 = new 类型名(初值列表);
    

    由于空间没有变量名字所以只能通过指针进行间接访问

    类型名决定分配空间的大小

    初值列表是可选的

    举例

    image-20210405141951098

    释放

    释放指针所指向的内存空间的格式为:

    delete 指针名;
    

    例如:delete point;

    注意: 释放了point所指目标的内存空间,指针point本身并没有撤销。

    建议这时将point置空(NULL)。

    判断申请空间是否成功

    image-20210405142432688

    动态数组

    动态数组解决什么问题?

    定义数组时元素个数还不能确定;(在编译前还不能确定)

    动态数组如何定义?

    指针变量名=new 类型名[下标表达式];
    delete[ ] 指向该数组的指针变量名;
    

    指定数组元素的个数,可以是变量

    如何访问各元素?

    由上式定义的是无名数组,
    其元素只能通过指针变量间接访问。

    举例:

    image-20210405143351077

    image-20210405143400000

    image-20210405143547404

    展开全文
  • 指针——C++灵魂

    2021-02-06 21:37:44
    指针变量是一种特殊的变量,用于存放内存单元的地址,既能存放地址的变量就是指针变量。 指针变量的定义格式: 数据类型 * 指针变量名 ———定义语句中" * "表示该变量为指针变量 ———指针变量前的数据类型规定了...

    学习指针之前需要明确一个概念叫内存地址,计算机的内存被划分为一个个的存储单元,简称内存单元;内存单元按一定的规则编号,这个编号就是存储单元的地址。
    在这里插入图片描述

    指针变量和指针变量的定义

    指针变量是一种特殊的变量,用于存放内存单元的地址,既能存放地址的变量就是指针变量。
    指针变量的定义格式:
    数据类型 * 指针变量名
    ———定义语句中" * "表示该变量为指针变量
    ———指针变量前的数据类型规定了指针变量指向的变量的数据类型
    指针变量的三个要素
    变量名:与一般变量名相同,由英文字符开始
    指针变量的类型:指针所指向的变量的类型,而不是自身的类型。指针变量本身均为 long int 类型。
    指针变量的值:是某个变量的内存地址。
    地址运算符 &
    取地址运算符:是一个一元运算符,用来得到一个变量的地址。
    例如: int a;
    &a表示变量a在内存中的起始地址。&后面必须是一个变量。
    **指针运算符 * **
    指针运算符:是一个一元运算符,表示指针变量所指向的变量的值。
    指针变量的初始化与赋值
    指针变量初始化,在定义时赋值:
    数据类型 *指针名=地址
    指针赋值:指针变量=地址;
    其中的“地址”可以是变量的地址,数组名等
    指针赋值的注意事项:
    不能把常量或表达式赋给指针变量。
    不能将一个整数赋给指针变量,但可以赋整数值0,0是可以直接赋给指针变量的,表示空地址。

    展开全文
  • 指针和引用

    2019-03-21 16:31:10
    为了区分不同的内存单元,必须给每一个内存单元一个编号,这个编号就称为内存单元的地址 2:变量的地址 在编译或执行期间,为每一个变量分配内存单元的编号称为变量的地址。 3:指针的概念 一个变量的地址也称为...
  • 指针变量是一种特殊的变量,用于存放内存单元的地址,即能存放地址的变量就是指针变量。 定义 数据类型 指针变量 三要素 变量名 指针变量的类型(这个类型说的是所指的变量的类型,而不是自身的类型。
  • 一条批量Load/Store指令可以实现一组寄存器和一块连续的内存单元之间传输数据,语法格式如下: DM | STM {<cond>} <addressing_mode> <Rn>{!}, <registers>{^} 以上指令中规则编号...
  • 指针与指针变量

    2016-05-30 22:50:00
     计算机的内存被划分成一个个存储单元,这些存储单元按一定的规则编号,这个编号就是存储单元的地址。每个存储单元大小为一个字节,每个单元的地址是唯一的。 2. 变量的地址  在程序中所有的变量都要分配相应的...
  • 计算机的存储器被划分为一各个储存单元,储存单元按照一定的规则编号,这个编号就是储存单元的地址。地址编码的基本单元是字节,一个字节由八位二进制数组成,也就是说每一个字节是一个基本的内存单元,有一个地址。...
  • 指令STMFD和LDMFD分析

    2012-08-16 11:40:06
    指令STMFD和LDMFD分析  根据ATPCS规则,我们...在STM、LDM指令中,寄存器列表与内存单元的对应关系:编号低的寄存器对应于内存中低地址单元;编号高的寄存器对应于内存中高地址单元。 通过ARM对于栈操作和批量
  • STMFD和LDMFD指令个人理解分析

    千次阅读 2013-12-02 11:34:15
    LDM/STM指令主要用于现场保护,数据复制,参数传送等。 根据ATPCS规则,我们一般使用FD...在STM、LDM指令中,寄存器列表与内存单元的对应关系:编号低的寄存器对应于内存中低地址单元;编号高的寄存器对应于内
  • 目录 1 内存空间访问方式 2 指针变量声明运算和赋值运算 2.1 指针变量声明 2.2 与地址有关运算以及指针赋值 2.3 指针赋值 3 指针运用 3.1 指针运算 3.2 用指针处理数组...储存单元按一定的规则编号...
  • 数组中顺序存放了一批相同数据类型数据,这些数据不仅数据类型相同,而且在计算机内存里连续存放,地址编号最低存储单元存放数组起始元素,地址编号最高存储单元存放数组最后一个元素。通过数...
  • 因此, 一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。图中,设有字符变量C,其内容为“K”(ASCII码为十进制数 75),C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A, 这种...
  • 无向交换单元:若将一个交换单元的相同编号的入线和出线连在一起,每一条都既可入 也可出,即同时具有发送和接收功能。 10.交摸单元的性能指标有哪出?各自含义是什么? 各 1)容量:交换单元所有入线可以同时送入的总的...
  • Delphi5开发人员指南

    热门讨论 2012-07-18 16:51:14
    3.3.2 Win32系统是怎样管理内存的 76 3.4 Win32错误处理 78 3.5 总结 78 第4章 应用程序框架和设计 79 4.1 理解Delphi环境和项目体系结构 79 4.2 构成Delphi 5项目文件 79 4.2.1 项目文件 80 4.2.2 单元文件 ...
  • Excel VBA实用技巧大全 附书源码

    热门讨论 2010-10-08 18:59:24
    04130向连续的单元格列区域一次性输入不同数据 04131向单元格区域一次性输入相同数据 04132通过数组向单元格区域一次性输入数据 04133向单元格区域输入连续值 04134向单元格区域输入连续日期 04135向单元格...
  • windowsnt 技术内幕

    2014-04-09 20:47:17
    考试编号的识别 课程内容和考试内容对照 理解微软MCSE长远考虑 理解微软出题方式 使用本书帮助备考 在Internet上寻找对考试有帮助信息 寻求微软认可课程指导 寻找高质量和三方帮助 寻找可利用评估软件...
  • Cisco路由器手册

    2012-09-27 09:12:22
    目 录 译者序 前言 第1章 Cisco IOS软件 1 1.1 优点 1 1.2 软件包 3 1.3 所支持特性 4 1.3.1 协议 4 1.3.2 管理 8 1.3.3 多媒体和QoS 8 1.3.4 安全数据传送 8 ...13.3.1 IP主机名和IP地址的静态定义...
  • asp.net知识库

    2015-06-18 08:45:45
    Oracle编程编码规范及命名规则 Oracle数据库字典介绍 0RACLE字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时...
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    若找到,则函数返回第i个结点的地址;若找不到,则函数返回NULL; B. 球最大值函数max:通过单链表的一趟遍历,在单链表中确定值最大的结点; C. 统计函数number:统计单链表中具有给定值x的所有元素数量;...
  • 面向对象方法所强调基本原则,就是直接面对客观存在事物来进行软件开发,将人们在日常生活中习惯思维方式和表达方式应用在软件开发中,使软件开发从过分专业化方法、规则和技巧中回到客观世界,回到人们通常...

空空如也

空空如也

1 2
收藏数 27
精华内容 10
关键字:

内存单元的地址编号规则