2内存及其操作.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2内存及其操作

* 计算的本质 从根本上说,计算就是执行CPU指令。 实现自动计算,就一定要保存程序(内存) * CPU对内存的操作 Von Neumann CPU Memory Address Data Read / Write control 8bit 1Byte = 8bit 0012FF87 0012FF81 0012FF7F 0012FF7D 0012FF7C 0012FF80 0012FF7E * 内存的内容 内存中存放的是可执行文件(.exe)。 .exe与.c等效。 .exe是.c中的代码转换成了指令与数据(机器码)。 每个内存单元中,存放了指令或者数据。 * 对内存的访问 用变量对应某段内存,可避免直接使用内存地址 内存的2个方面:地址+内容 通过变量(符号)对内存内容进行读/写 0012FF7C 5 0012FF78 5 int x = 5; int y = x; * 符号表 exe文件中,根据obj的符号表把标识符变成地址。(obj中的符号表记录的是相对地址-从0开始) 0012FF7C 0012FF7D 0012FF7F 0012FF81 0012FF7E 0012FF80 0012FF82 0012FF83 符号 类型 地址(符号值) 其他 a int 0012FF7C …… fun void 0012FF82 …… …… 100 int a = 100; void fun() { } 100 变量值 变量名 0012FF7C * 在代码中取地址 (取址=取地址值 ) 地址值是常量(变量的地址,是只读的) 不能对地址值取地址(区分地址和地址值) 只能对变量取址(右边是符号—标识符) 地址有类型,地址值是字面值。地址可以取内容。 技巧:在编程时你可以忘记符号表,而把内存内容等同于变量,内存地址等同变量。 int a = 100; printf(%p\n,a); 0012FF7C 100 * 在代码中取内容*(取内存的内容) int a = 100; int b = *(a); printf(a=%d\n,a); printf(b=%p\n,b); printf(b=%d\n,b); 0012FF7C 100 0012FF78 100 * 在代码中取内容*(取内存的内容) 只能对地址取内容(*右边是地址,地址=指针),不能对非指针变量取内容。 对于指针变量,取内容即指针所保存地址的内容,该内容可以读写。 *与是互逆的操作 *与的不同 由变量声明决定(不读写内存) *根据地址读取内存 * 操作与求值 操作符(* [ ] - + \ % =等等)通过类型进行操作,可以认为,操作是类型的行为。 在操作之前,都会对操作对象求值(表达式求值)。 操作对应计算机指令,操作对象对应数据。 优先级 () [] . -,++ --, * , == int a = 100; int b = a + 1; int *p = a; p++; //p=p+1; * 偏移地址取内容 [ ] 取内容,可读写。 []左边是地址。 (*右边是地址) []是一种危险操作,它不做越界检查。 int a = 10; int b = 8; int c = 3; printf((b)[1]=%d\n,(b)[1]); printf((b)[0]=%d\n,(b)[0]); printf((b)[-1]=%d\n,(b)[-1]); 读写内存 int a = 56; int *p = a; 写: a = 56; *p = 100; //*(a) = 100; p[0] = 200; //(a)[0] = 200; 读: int b = a; int c = *p; // int c = *(a); int d = p[0]; // int d = (a)[0]; * * 地址变量—指针(图示) 0012FF78 = p p = 0012FF7C a = 100 0012FF7C = a 00 00 00 64 00 12 FF 7C int a = 100; int *p = a; //定义 printf(*p=%d\n, *p); //操作 0012FF78 0012FF7C 指向指针的指针 * * 0012FF78 = p p = 0012FF7C a = 100 0012FF7C = a int a = 100; int *p = a; int **q = p; 0012FF74 = q q = 0012FF78 * 地址变量—指针 地址变量也是变量,普通变量通常存储字面值,地址变量存储地址值。 指针就是地址,指针(变量)存储地址值。 指针的大小固定=机器字长。 指针变量的偏移:p[i], p++, p--, p

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档