当前位置: 首页 > ai >正文

【时时三省】(C语言基础)通过指针引用数组元素

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省

引用一个数组元素,可以用下面两种方法:

( 1 )下标法,如a[i]形式;

( 2 )指针法,如* ( a + i )或* ( p + i )。其中a是数组名,p是指向数组元素的指针变量,其初值p = a。

例题:

有一个整型数组a,有10个元素,要求输出数组中的全部元素。

解题思路:

引用数组中各元素的值有3种方法:

编写程序:

( 1 )下标法

 运行结果:

 ( 2 )通过数组名计算数组元素地址,找出元素的值;

运行结果: 

与上面程序相同

程序分析:

( a + i )是a数组中序号为i的元素的地址,* ( a + i )是该元素的值。用& a[i]表示a[i]元素的地址,也可以改用( a + i )表示,即:

scanf (“% d”,a + i );

( 3 )用指针变量指向数组元素。

运行结果:

与(1)相同。

程序分析:

先使指针变量p指向a数组的首元素(序号为0的元素,即a [ 0)接着在输出* p,* p就是p当前指向的元素(即a [ 0 ])的值。然后执行p + +,使p指向下一个元素a [ 1 ],再输出* p,此时* p是a [ 1 ]的值,依此类推,直到p = a + 10,此时停止执行循环体。

第111,112可以改为

for ( p = a;p < a + 10 );p++ )

  scanf("%d",p);

用指针变量表示当前元素的地址。

3种方法的比较:

第(1 )和第(2 )种方法执行效率是相同的。C编译系统是将a [ i ]转换为* ( a + i )处理的,即先计算元素地址。因此用第(1 )和第(2 )种方法找数组元素费时较多。

第(3 )种方法比第(1 )、第(2)种方法快,用指针变量直接指向元素,不必每次都重新计算地址,像p ++这样的自加操作是比较快的。这种有规律地改变地址值( p++ )能大大提高执行效率。

用下标法比较直观,能直接知道是第几个元素。例如,a [ 5 ]是数组中序号为5的元素(注意序号从0算起)。用地址法或指针变量的方法不直观,难以很快地判断出当前处理的是哪一个元素。要仔细分析指针变量p的当前指向,才能判断当前输出的是第几个元素。有经验的专业人员往往喜欢用第(3 )种形式,用p + +进行控制,程序简洁、高效。第(1 )种形式,直观、不易出错。

注意:在使用指针变量指向数组元素时,有以下几个问题要注意:

( 1 )可以通过改变指针变量的值指向不同的元素。例如,上述第(3 )种方法是用指针变量p来指向元素,用p + +使p的值不断改变从而指向不同的元素。如果不用p变化的方法而用数组名a变化的方法(例如,用a ++)行不行呢?是不行的。因为数组名a代表数组首元素的地址,它是一个指针型常量,它的值在程序运行期间是固定不变的。既然a是常量,所以a + +是无法实现的。

( 2 )要注意指针变量的当前值。

 

http://www.xdnf.cn/news/15116.html

相关文章:

  • Redis 分片集群
  • C++中的智能指针(1):unique_ptr
  • 《汇编语言:基于X86处理器》第7章 整数运算(2)
  • 星云穿越与超光速飞行特效的前端实现原理与实践
  • 上位机知识篇---Linux软硬链接
  • 用 ELK+Filebeat 提高50%问题排查效率,这套方案实测有效!
  • cnpm exec v.s. npx
  • Shader面试题100道之(81-100)
  • python之set详谈
  • LeetCode经典题解:128、最长连续序列
  • TCP服务器与客户端三种方法实现
  • Linux权限的概念
  • SM712.TCT Semtech TVS二极管——电子设备的终极电路守护
  • DNS(Domain Name System,域名系统)
  • 计算机毕业设计ssm晋中大学城校园论坛 SSM大学城学生社区互动管理平台 JavaWeb高校校园信息交流与服务系统
  • java底层的native和沙箱安全机制
  • 系统思考:多元胜过能力
  • 鸿蒙 Secure Boot 全流程解析:从 BootROM 到内核签名验证的实战指南
  • 2025 年值得尝试的 6 大内容管理系统 (CMS)
  • 【实用IP查询工具】IP数据云-IP地址查询离线库使用方案
  • 【操作系统】Linux 中的 exec 命令
  • RK3566/RK3568 Android11 CAN开发(内核配置+测试验证+安卓app开发)
  • STM32F103之存储/启动流程
  • HarmonyOS基础概念
  • 【TCP/IP】17. 移动 IP
  • Swift 解 LeetCode 324:一步步实现摆动排序 II,掌握数组重排的节奏感
  • 雷达遥感星座微波射频组件抗辐照MCU的选型与实践
  • 【JMeter】接口加密
  • 【JMeter】调试方法
  • 学弟让我帮忙写一个学生管理系统的后端,我直接上科技