第一范文网 - 专业文章范例文档资料分享平台

信管C基础第10章-指针

来源:用户分享 时间:2021-06-02 本文由固执旳活在无知 分享 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

C基础

第十章 指针10.1 地址和指针的概念数据在内存的存放、读取方式(以变量为例):1、数据使用前的编译处理过程用户在程序设计中 定义一个变量 内存区每一个字节 有一个编号—地址 编译过程中:

1、根据变量类型,分配一定长度 的内存空间;2、变量名转换为所分配内存的地址

2、用户存取数据方式 变量名 地址 地址所标志的内存段 数据

C基础

*一个比方:旅 客 — 变量数据 旅 客 名 字 — 变量名 旅馆房间 — 内 存 区 旅馆房间号 — 地 址 查找旅客:旅客名字—房间号码—房 间—找到旅客 存取数据: 变量名 —内存地址—内存区—数 据

*注意:内存单元的地址与内存单元的内容是不同的。 内存单元地址—旅馆房间号码 内存单元内容—住在房间内的旅客。内存地址 …… 2000 2002 2004 2006 内存用户数据区 …… 331 220 …… 内存中存 放的数据

C基础

3、数据存取举例设程序中已定义三个整型变量 i, j , k,编译时系统将2000和 2001两个字节给变量i ,2002、2003给j,2004、2005给k。内存 分配示意图如下内存地址 2000

内存用户数据区…… 3

变量 i

20022004

69 ……

变量 j变量 k

printf (―%d‖,i)变量名i — 地址2000 — 取变量值3 — 送到输出设备

k=i+j变量名i — 地址2000 — 取变量值3 相加得9 — 送到K占用的2004,2005 变量名j — 地址2002 — 取变量值6

C基础

4、直接访问与间接访问直接访问: 在数据存取中,直接得到变量 i 地址然后 按变量 i

的地址存取变量 i 的值的方式。间接访问:在数据存放中,变量 i 的地址不是直接得到, 而是 存 放在另一个变量i_pointer中,须先从变量i_pointer中 获取变量 i 地址,然后按变量i地址存取变量值i的方式。

C基础

*一个比方(取抽屉A中的东西): 直接访问: 直接得到钥匙A — 打开抽屉A,取出东西 (直接获得变量 i 地址—按变量 i 地址存取变量的 i 值 ) 间接访问:钥匙A在抽屉B中—用钥匙B打开抽屉B得到钥匙A—打开抽 屉A取得东西变量i地址放在 变 量i_pointer中 读取变量i_pointer 值得到变量i的地址

按变量i地址存取i值

C基础

*间接访问例子过程:根据变量名i_pointer获得地址3010,到地址3010 读取数据,得到2000(变量i的地址),到2000地 址读取数据,得到变量i的值。内存地址 内存用户数据区 ……

20002002 2004

36 9

变量 i变量 j 变量 k

…… …… 30102000 …… 变量 i_pointer

C基础

5、指针和指针变量指针:一个变量的在内存区中的地址称为指针。通过变量的指 针,可以找到变量的存储单元,从而读取其中存放的值; 指针变量:专门用来存放指针的变量,称为指针变量。指针变 量存放的数据为另一变量的地址(指针)。 注意:指针与

指针变量的区别 指针—是一个地址,用于指向存放变量数据的内存单元; 指针变量—是一个变量,它的值是指针 例如:变量 i 的地址2000为该变量的指针,变量i_pointer是 用来存放 变量i的指针的,它是一个指针变量。

C基础

对地址的操作之前我们可以通过&运算符得到变量的地址。既然有了地址, 就应该可以对该地址进行读写。 int i=300; int j; j = &i ; 变量j 中存放的是一个数,是i的地址 但我们要如何才能把一个数如 200 存放到变量i所在的内存 中呢? 最简单的方式 i=200; 这是赋值语句,编译器会自动的把200送到i所在的内存单元 但我们如何实现直接对地址操作? j = 200; 不可行。此语句是把200送到变量j所在内存单元, 对变量i没有任何影响

C基础

指针C语言和其他语言的一个重要区别在于:C 语言提供了一种方法,使程序员可以不通 过变量名,而通过变量地址直接对变量所 在的内存单元进行操作。这样,C语言就 有了低级语言的特性,直接对地址进行操 作也更高效。 C中要直接对地址(内存)进行操作,需 要使用指针变量

C基础

10.2 变量的指针和指向变量的指针变量指针:它首先是一个地址,是指变量在内存中的地址 ; 指针变量:它是一个变量,是一个专门存放变量地址的变量,用来指向另一个变量。 变量都是有类型的,如int ,float,这里可以理解为:现在 有一种变量,它存放的数据对CPU而言表示为“地址”,但 要明白,不管是什么,都是一个“二进制”,地址也是一个 数。

指针变量的出现,解决了对内存操作的问题: 为了表示指针变量和它所指向的变量之间的联系, 在程序中用“*”表示“指向”例:假设i_pointer代表指针变量,它有一个值,这个值就是 某个变量的地址;而 *i_pointer 是i_pointer所指向的变量。所 谓的“指向”就是 i_pointer 的值所在的内存单元,见下图

C基础

指针和指向int i; int * i_pointer; i=3; i_pointer=&i; 定义一个指针变量

分配一块2字节的内存,假设地址为2000,并用符号i表示这 个地址 分配一块2字节的内存,假设地址为2004,并用符号 i_pointer代表这个地址 i=3; 然后把3写入i的地址,就是写到内存2000处 i_pointer=&i; 然后把i的地址2000写入i_pointer的地址, 就是写到内存2004处

C基础

指针和指向现在,内存中的情况如下

我们称:i_pointer指向变 量i,为什么? i i_pointer存放i的地址,通 过i_pointer,可以找到i 问题:如何给i赋值为5? i_pointer = 5;

2000 5内存 2004

i_pointer

5 3内存 2000

C语言提供一种特殊的表示方式: * i_pointer 用它表示i_pointer所指向的内存单元 *i_pointer = 5; 把5写入到i_pointer所指向的内存单元*i_pointer与 i 是等效的,都表示同一变

量,该变量存放地址为2000。 因此: ① i=5; ② *i_pointer=5 两语句作用相同,后者直接操作内存

C基础

10.2.1定义一个指针变量例: int i, j ; int *pointer_1 , *pointer_2 ; 第一条命令定义了两个整型变量 i, j; 第二条命令定义了 ①两个指针变量 pointer_1, pointer_2,它们 指向整型变量; ②两个整型变量*pointer_1, *pointer_2, 它们与 i,j为相同类型,被pointer_1, pointer_2 两个指针所指向;

C基础

*基类型:指针变量的基类型是指该指针变量可以指向的变量的 类型;

搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新人文社科信管C基础第10章-指针全文阅读和word下载服务。

信管C基础第10章-指针.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/wenku/1195370.html(转载请注明文章来源)
热门推荐
Copyright © 2018-2022 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top