3分钟搞定指针和数组两者间的联系和区别?

article/2025/7/22 11:58:50

1.指针和数组定义、区别

1.1指针和数组定义

指针和数组都是C语言的精髓所在,对于很多C程序员来说,如果你问这样一个问题:数组和指针有什么区别?他们的答案很可能是:”数组和指针不是同一样东西吗,他们之间有什么区别啊?“;确实在极个别的情况下,数组和指针确实可以”通用“。

但是在却大多数情况下,数组和指针是两个完全不同的C语言特性。

首先,我们分别看一下,指针和数组的定义,以及他们之间的不同;指针表示C语言中某种数据类型的数据存储的内存地址,例如,指向各种整型的指针或者指向某个结构体的指针;数组表示若干个相同C语言数据类型的元素在连续内存中储存的一种形态。

1.2数组和指针的区别

好了,上面即为数组和指针的简单定义。在说明数组和指针之间的区别之前,我们先来看一个实例;

我们定义两个文件:a.c和b.c,其中,

[cpp] view plain copya.c文件: int array[4] = {1, 2, 3, 4}; b.c文件: #include <stdio.h> extern int *array; int main(void) { int i = 0; for (; i <4; i++) { printf("*array = %d", *array++); } return 0; }

我们编译运行上面的示例程序,不出意外其无法运行。可能有的人很不理解其中原因,他们找不出问题的原因。其实根本原因就是他们认为数组和指针是相同的!

其将array定义为一个4个int元素的数组,但是在b.c中却又将其声明为int型指针。其实数组和指针只是在特定的上下文环境下可以认为相同,一般情况下,他们是不同的数据类型,就像float和int类型不同一样。

下面逐步分析数组和指针之间的区别:

数组和指针本质上都代表一块内存,数组比较”直接“,数组名即代表这块内存的地址,而指针比较”含蓄“,其本身不代表任何有意义的内容,只有给它赋值后,它才真正的表示一块有意义的内存地址。

这就引出了指针和数组的一个区别:定义的时机不同;数组在编译时就已经被确定下来,而指针直到运行时才能被真正的确定到底指向何方。数组就好比生在帝王家一样,一生来就有了属于自己的封地、财富(内存),而指针需要经过编译、链接、运行时等重重考验才能获得属于自己的财富(内存)。

但是,数组的这些身份(内存)一旦确定下来就不能轻易的改变了,它们(内存)会伴随数组一生;而指针则有很多的选择,在其一生他可以选择不同的生活方式,比如一个字符指针可以指向单个字符同时也可代表多个字符等。

由数组和指针的上述区别引出了它们的之间的另一个区别:访问方式不同;由于数组名直接代表其身份(数组在内存中的地址),而指针需要间接才能知道自己的身份(通过读取其保存的地址),所以它们的对于自己”财富“的访问方式自然就不同了,数组为直接方式,而指针位间接访问。通过下面几幅图来说明,数组和指针对于自身元素的访问方式的不同:

2.再论数组

2.1数组和指针何时相同

图2-1展示了数组和指针何时相同。图2-1中说明了数组除了在作为函数参数或者在表达式中作为右值,其他情况情况下其与指针均不相同。

图2-1指针和数组何时相同

图2-1,中说明了数组除了在作为函数参数或者在表达式中作为右值,其他情况情况下其与指针均不相同。

C语言标准对于数组和指针何时相同定义几条规则:

规则1:表达式中的数组名(与声明不同)被编译器当作一个指向数组第一个元素的指针。

规则2:下标总是与指针的偏移量相同。

规则3:在函数参数的声明中,数组名被编译器当作指向该数组第一个元素的指针。

简而言之,数组和指针的关系颇有点像诗和词关系,它们都是文学性之一,有不少共同之处,但在具体的表现形式上又各有特色。下面具体介绍这几条规则的具体含义。

2.1.1 规则1

组合规则1和规则2,就是对于数组下标的引用总是可以写成“一个指向数组的起始地址的指针加上偏移量”。例如,假如我们声明如下:

int a[10], *p, i = 2;

就可以通过下面任何一种方式访问a[i]:

p = a;p[i];

p = a;*(p+i);

p = a + i;*p;

记住:在表达式中,指针和数组是可以互换的,因为它们在编译器里的最终形式都是指针,并且都是可以进行取下标操作。

2.1.2 规则2

数组下标和指针总是相同的,为什么要这么说呢?大家可能听说过,在编写程序时,对于数组访问应该写成指针的形式,因为这样可以提高效率。对于现代的编译器而言,这个说法一般是错误的!

现代编译器对于数组的访问都会自动优化为其对应的指针加偏移量的形式,所以也就没有哪种形式效率更高的说法了。实际上,数组的访问之所以改写为指针加偏移量的方式,是因为其为系统底层最基本的工作方式。

2.1.3 规则3

C语言中函数的参数基本都是“传值”调用的,唯独数组为“引用”调用方式,即数组作为函数参数时,会被编译器自动的转换为指向数组第一个元素的指针,这是编译器自动完成的。之所以这么做,其实是为了系统性能,因为数组结构占用的内存通常比较大,如果“传值”调用的话,内存拷贝会浪费大量的时间和空间,这样做得不偿失,所以数组作为函数参数时,编译器会自动将其转换为指向第一个元素的指针。

免责声明:内容整理自网络,版权归原作者所有,如涉及作品版权问题,请及时与我们联系,谢谢!

电子发烧友拆解及DIY推荐

电子发烧友学院精选

电子发烧友活动推荐

电子发烧友电路精选

电子发烧友资料精选

THE END


http://www.hkcw.cn/article/sWZkDaZQSR.shtml

相关文章

叠码仔|澳门赌场绝不透露的隐秘规则

澳门博彩监察协调局近日公布最新数据显示,6月份澳门博彩收入238.12亿元,较去年同期升5.9%,为2019年首6个月以来的最大升幅。(澳门博彩监察协调局披露数据) 这么高的博彩收入从哪里来的呢? 来澳门赌场 一定会接触这两种人 荷官和叠码仔 来说一说掌握赌场内幕的叠码仔什么是…

原创如何抠图?这5种抠图方法,简单易用!

如何抠图?抠图是图片编辑中非常重要的一步,现在很多生活和工作都离不开抠图。因此我们大家都需要快速掌握抠图技巧,给大家分享5种简单易用的抠图方法,可以帮大家轻松搞定各种图片处理需求。1. 嗨格式抠图大师 嗨格式抠图大师是一款专注于抠图的专业软件,它采用先进的AI技术…

MACD的底背离买入、顶背离卖出一旦学会,精准把握股票的买卖点!

顶背离 当股价K线图上的股票走势一峰比一峰高,股价一直在向上涨,而MACD指标图形上的由红柱构成的图形的走势是一峰比一峰低,即当股价的高点比前一次的高点高、而MACD指标的高点比指标的前一次高点低,这叫顶背离现象。顶背离现象一般是股价在高位即将反转转势的信号,表明股…

原创万科郁亮的年薪降为12万元,王石的退休金还是1000万元!

万科,作为中国房地产行业的领军企业,其一举一动都牵动着行业的神经。最近,万科高层的一则降薪消息,无疑成为了市场关注的焦点。据万科3月28日晚发布的2023年年报显示,自报告披露之日起,万科董事会主席郁亮、万科总裁祝九胜、万科监事会主席解冻自愿领取月薪税前1万元。也…

万有导航简洁实用的综合导航网站

今天给大家推荐的是一个综合的导航网站——万有导航。网址链接:https://wanyouw.com/。这个导航网站如其名,它提供的网站链接很丰富,囊括生活中的方方面面,譬如:视频、音乐、图片、科技、娱乐、社交、新闻、购物、编程等等,能够给我们上网查资料或者找资源提供不少的便利…

原创拒绝千万合同!1年330万的琼斯,会是太阳的冠军催化剂?

不久前,泰厄斯琼斯1年330万加盟太阳。 在琼斯签约后,我们曾说,这完全就是白菜价,因为以琼斯上赛季展现出来的水准,他完全得到一份千万年薪合同,最终只签下一份底薪,很可能是因为今年市场对控卫并不友好。然而从后续消息看,事情并非完全如此。 据纽约记者Ian Begley的最…

世界500强揭榜:北京断层领先,西安成都并列西部第一

多方期待的2024年《财富》世界500强已在近日正式公布。 作为评估全球大型公司影响力的榜单之一,世界500强一方面通过直观的排名展示,让公众知晓本国与世界大公司的竞争或存在的优劣势状况;另一方面借助纵向年份和横向不同行业的对比,能更为清晰地对大型企业最新发展方向、细…

来黄山玩是到黄山北站还是黄山西站?一篇带你了解清楚

景区气象:今天夜里到明天白天晴到多云,偏东风3到4级,气温16到22℃;明天日出时间5时05分可见概率60%;云海概率45%。森林火险1级。 黄山市是一座享誉中外的旅游名城 在这里游客可以领略到大自然的神奇魅力 也可以感受到中华文明的博大精深 黄山市是中国十大风景名胜黄山风景…

外国人辱华词汇解读“chingchong”等词汇背后的歧视历史

近日,一条美国说唱歌手辱华的说唱视频在网络上引发广泛关注。视频中,这位17岁的美国说唱歌手使用了“chingchong”、“眯眯眼”以及嘲讽姚明眼睛小的行为。这些词汇和动作都在歧视亚洲人,特别是中国人。 “chingchong”本意青虫,本身就是用来歧视中文发音的。“眯眯眼”也是…

原创性感日系熟女!41岁安惠美,成熟韵味顶不住!

安惠美是一位备受瞩目的日本女星,以其出色的演技和独特的魅力赢得了无数粉丝的心。她在影视界的杰出表现以及她的个人魅力使她成为了无数人心目中的偶像。安惠美以她甜美的笑容和迷人的外貌闻名。她的美丽不仅仅是外在的,更重要的是她内心散发出的自信和魅力。无论是在红毯上…

原创“惊艳”不是词,而是词组,更不等同于“艳惊”!您注意到它们的用法了么?

最近几年,“惊艳”这两个字经常出现在各种媒体上,自媒体里出现的频率更高。 比如,在形容和夸赞某位歌手、乐手时,有人会这样来表述: “她一出场,惊艳了在座的所有观众。” 这等于是在说,她一出场,使在座的所有观众都因为震惊而变得艳丽了。 这种用法让人听了、看了,就…

什么是指接板?

dop设计(ID:dopdesign)原创 作者丨dop设计 编辑丨那兰 咱设计界的材料,不说上万,也有好几千了。材料上的名字也是相当的多,拿板材来说,有密度板、刨花板、OSB板、纤维板、阻燃板、夹板、木工板、指接板、玻镁板、防火板、水泥板、石膏板....... 这各式各样的名字跟娱乐圈…

美国被曝暂停向中国出售核电站设备 贸易紧张关系升级

在中美贸易紧张关系持续的背景下,特朗普政府暂停了美国核设备供应商向中国发电厂出售产品的许可证。据知情人士透露,美国商务部已向各公司发出禁令,暂停核电站零部件和设备的出口许可。过去两周,中美贸易战从关税谈判转向互限供应链,众多公司受到了销售限制。美国商务部尚…

助听器排名前十名牌子是哪些?町石TINX、飞利浦、挚听机型大测评

助听器行业正面临诸多挑战。由于行业起步较晚且技术壁垒较高,一些助听器品牌仅提供基础的声音放大功能,而缺乏先进的技术来有效处理背景噪音、回声、电子干扰和啸叫声等问题。特别是一些价格低廉的助听器,它们可能含有不易察觉的低频电子噪音。长期使用这类产品可能会引发使…

不做中国的iPhone,只做世界的魅族!黄章究竟有多狂?

魅族之后,再无魅族! 如果说一个枭雄的没落是一个时代的眼泪,那魅族的没落无疑是手机发展进程中的一滴泪。 曾经的魅族有多风光? 它是连乔布斯都忌惮的公司,是雷军偷师学艺的企业,创始人黄章更是被业界称为最有可能超越乔布斯的人。就是这样一个手握王炸开局的企业,却在时…

2024云栖大会,我们来了!

2024.9.19-9.21云栖大会来了!3大重磅主论坛400场论坛与并行话题抵达科技前沿40000平米智能科技展探寻云启智跃先锋场景72小时沉浸式互动体验与动手实践共享创造、畅想与灵感碰撞限量免费门票火热报名中!大会亮点详情👇与我们一起见证云+AI的产业蝶变!

2024最新版全国铁路线路图公布,4.5万公里高铁通达八方

2024-01-11 20:49:09 作者:姚立伟 中国铁道出版社有限公司最新版全国铁路线路图公布,截至2023年底,全国铁路营业里程达到15.9万公里,其中高铁4.5万公里。2023年,全国铁路完成固定资产投资7645亿元、同比增长7.5%,投产新线3637公里,其中高铁2776公里,圆满完成了年度铁路…

原创藏传佛教中的四大活佛,分别是哪四人?你真的了解吗

在藏传佛教这个深远影响着成千上万信徒生活与思想的宗教体系里,有几位特殊的宗教权威,他们被称为“活佛”。这些活佛不仅是精神引导者,更是连接神圣与现实、古与今的文化纽带。下面,我们将探讨藏传佛教中四位重要活佛,试图揭示他们在历史长河中的不凡地位和所产生的深远影…

十款必藏的俄罗斯在线宝藏网站

作为一位热爱俄国文化的俄语创作者,我强烈推荐大家收藏这十个热门的俄罗斯网站,它们将为你在学习和生活中提供便利和帮助。1、Yandex(https://yandex.com/)这是俄罗斯最大的搜索引擎,提供搜索、新闻、地图等多种服务,界面友好且更适合俄语内容的搜索需求。2、VKontakte(…

斗罗大陆231集千仞雪光屁股照曝光,比比东露肩装真养眼

斗罗大陆动漫第231集更新,虽然剧情大部分是原创,但美女加持让这集动漫看起来不再枯燥。千仞雪的光屁股照曝光,而比比东的露肩装更是让人养眼。唐三在昏迷中显得娘气十足,而比比东在看到千仞雪时,眼神阴暗,但触碰到千仞雪的小手后,母爱天性被激发,眼神变得无比温柔。比比…