与数组有关的地址

我本来打算以一个程序开始,让我们直接理解相关概念。但转念一想,如果引导你思考问题而得出结论,或许会有另一种效果,因此,我们的讨论以下面的定义为基础。

int a = 9;int b[3] = { 0, 1, 2 };

程序中定义的每个变量都对应一个具体的地址。我们可以使用&a取到变量a的地址。而数组是一组内存空间连续的存储,数组中可以有多个元素,而这么多元素却只有一个符号(b),那么它应该代表哪个元素的地址呢?

现在想像你面前有一摞盘子(或一包抽纸),每次从顶上抽取一个总比从中间或底部来的轻松方便。语言设计也是如此。如果b代表的是b[1](第二个元素)的地址,那访问上一个元素就需要减去某个偏移,访问下一个就需要加上偏移。试想这种情况会应用到循环语句中,那为了使用地址遍历数据(即,间接访问),在每次进入循环前还需要调整到开头地址,这种违背常理、人性、天理不容的设计会让人咒骂。所以,有些东西的设计不单单是能用,还要便利。

由此我们暂时可以推断出,数组名与数组第一个元素有关,这样才能方便连续访问。下面我们用程序说明。

示例代码的注释中已经给出了足够多的信息。以前我使用%x输出地址,更正规的是使用%p格式符。根据最后三行输出,我们可以看到数组的另一个特性:数组中的所有元素在内存中都是连续存储的。 这也是数组支持随机访问(如a[1], a[5], a[9])的原因。

由输出可以看到,数组名与数组第一个元素的地址一样,这代表数组名同时也代表数组首先的地址;但是请注意,&a与a的地址虽然一样,但它们的意义是完全不一样的!

数组传递到函数

我们不能把一个数组赋给另一个数组以达到拷贝元素的目的,通常这需要我们手动完成。我们在《数组传递到函数》一文中曾提到过把数组传递给函数时,数组类型事实上被转换为指针类型了。现在我们使用指针来编写几个关于数组的函数。

在客户端程序中,我们测试了数组的拷贝函数与变换函数,两个函数的内部已经有足够的注释,以帮助我们理解的更多。希望你能掌握数组名与地址,数组元素与地址的关系,以及基于下标和指针这两种访问方式。

c语言指针查找数组一个数_C语言快速入门——指针与数组相关推荐

  1. c语言一个整数各位数字个数_C语言编写程序输出10个整数中最小值或最大值

    C语言编写程序输出10个整数中最小值或最大值 这是一个比较基础,同时也包含C语言中诸多特点的程序,仔细体会有很多的格式规则和技巧.其中包括:输入语句,输出语句,数组,分支结构,循环结构.希望广大C语言 ...

  2. c语言一个整数各位数字个数_C语言实现把字符串中的数字转换成整数

    ===Tips:点击上方 蓝字 关注并查看历史消息===   本题实现的功能是把字符串中的数字提取转换成整型数字,例如:若输入字符串"ab56cd87",则输出结果:以%d格式输出 ...

  3. 机械优化黄金分割法c语言编程,黄金分割法_机械优化设计_C语言程序.doc

    黄金分割法_机械优化设计_C语言程序黄金分割法_机械优化设计_C语言程序 黄金分割法的优化设计 实验报告 学院:机电工程 机制自动化11-03班 学号:541102010326 姓名:刘点点 1,黄金 ...

  4. c语言贪吃蛇最简单代码_C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!...

    点击上方"大鱼机器人",选择"置顶/星标公众号"福利干货,第一时间送达!指针对于C来说太重要.然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机 ...

  5. android 数组赋值字符串_c语言中的字符数组与字符串

    1.字符数组的定义与初始化 字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素. char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y ...

  6. 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值

    题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...

  7. 取消对 null 指针“l”的引用。_C语言编程笔记丨C 语言指针 5 分钟教程

    指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.在这份教程里"引用"表示计算机内存地址.从指针指向的内存读取数据称作指针的取值 ...

  8. c#数组赋初值_c语言给数组赋值的3种形式

    c语言给数组赋值的3种形式 在C语言中,对数组进行赋值的三种形式 1.通过循环的形式 即:数组名[下标] 对数组的元素进行依次赋值#include int main() { int i; int a[ ...

  9. C语言 二维数组的用法,二维数组方法用法 _C语言-w3school教程

    C语言 的 二维数组 C语言中的二维数组以行和列的形式表示,也称为矩阵. 它也被称为阵列数组或数组列表. 二维,三维或其他维度数组也称为多维数组. 二维数组声明 我们可以用以下方式在C语言中声明一个数 ...

最新文章

  1. Armadillo脱壳练习笔记(一)
  2. Rust语言之HelloWorld Web版
  3. 告别Kafka Stream,让轻量级流处理更加简单
  4. 《C++游戏开发》十八 角色在障碍物中智能行走的实现
  5. 一道百度前端线上笔试题
  6. IOS之storyBoard的storyboard_reference的使用
  7. 卸载frontpage服务器扩展_免费0撸一月腾讯云服务器
  8. centos之mysql安装配置使用
  9. Docker系列(七)构建镜像
  10. 利用电力声类比与有限元仿真方法分析亥姆霍兹共振器
  11. ENVI大气校正后遥感图像颜色变了及编辑头文件
  12. 我的k8s随笔:Kubernetes 1.17.0 部署讲解
  13. 华为手机的快应用是什么?如何使用快应用?
  14. TI15.4STACK协议栈解读
  15. 安卓修改Airpods的双击功能,改“播放暂停”————下一首
  16. 写段小程序,为自己的配置加个密
  17. 腾讯短链接生成api
  18. 【转载】三种证明欧拉恒等式的方法(3 methods of proving Euler's Formula )
  19. 人眼视觉系统(Human Visual System)
  20. 教师招聘 计算机技能测试,技能测试-计算机(教师招考真题).doc

热门文章

  1. oracle 视图权限 oracle 创建视图权限不足( ORA-01031: 权限不足)
  2. linux下配置SVN搭建 centos svn安装配置
  3. 【十五分钟Talkshow】如何善用你的.NET开发环境
  4. 使用维护Relationship
  5. 猎豹MFC--CFile类家族介绍ADO连接数据库 打开数据库 关闭数据库 连接字符串
  6. 3-4笔刷的详细设定
  7. vim中字体和配色方案设置
  8. Microsoft Office 企业记分卡管理服务器
  9. windows程序窗体创建流程模型A--利用基本数据类型
  10. 大数据之-Hadoop完全分布式_集群文件存储路径说明_完全分布式集群测试---大数据之hadoop工作笔记0038