博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
指针与数组的寻址方式
阅读量:4356 次
发布时间:2019-06-07

本文共 506 字,大约阅读时间需要 1 分钟。

当你定义一个数组, 编译器会对数组分配一段连续的内存空间. 一旦你使用数组来下标方式来存取元素, 其过程为:

char a[9] = "abcdefgh" ; c = a[3] ;
假设编译器符号表具有一个地址 9980 (数组 a 的起始地址)
      运行时步骤 1: 直接将 9980 与 3 相加
      运行时步骤 2: 取该地址的内容

  

当你定义一个指针, 编译器会对指针分配一个存放指针大小的空间. 一旦使用指针来获取元素, 其过程为: 

char *p = "abcdefgh" ; c = p[3] ;

编译器符号表具有一个 p, 假设其地址为 4624, 内容为 5081

      运行时步骤 1: 取地址 4624 的内容, 即得到 5081
      运行时步骤 2: 将 5081 与 3 相加 
      运行时步骤 3: 取该地址内容 

   以上可以看出, 对指针和数组的取值方式在底层实现有很大差异: 指针比数组多了一层取地址操作.
   所以, 当你定义一个数组并声明为一个指针时, 会导致严重的运行时错误. 反之亦然.

转载于:https://www.cnblogs.com/walfud/articles/2111624.html

你可能感兴趣的文章
Linux企业运维高效技巧心得及分享
查看>>
fdisk分区和挂载
查看>>
2019春第八周作业
查看>>
AsyncTask和Handler两种异步方式的实现和区别比较
查看>>
wordpress搬迁后内页显示链接错误解决办法
查看>>
制造行业流程管理的“IPO”思维
查看>>
Android PhotoView基本功能实现
查看>>
基于Docker搭建MySQL主从复制
查看>>
两台centos之间传送文件
查看>>
使用DevExpress官方汉化文件对界面进行汉化的过程
查看>>
关于获取各种浏览器可见窗口大小的一点点研究
查看>>
C#获取枚举描述
查看>>
emwin 之模态窗口
查看>>
.NET (C#) Internals: ASP.NET 应用程序与页面生命周期(意译)
查看>>
值语义与对象语义
查看>>
查找(二叉排序树)
查看>>
python全栈开发-Day8 函数基础
查看>>
ESE Toolkit:使用Windows的内部高性能数据库构建应用程序
查看>>
为Windows 8开发业务应用程序
查看>>
<authentication> 元素
查看>>