历史上的今天
返回首页

历史上的今天

今天是:2025年01月03日(星期五)

正在发生

2018年01月03日 | C51程序设计中的数组和指针关系

2018-01-03 来源:eefocus

一、指针是地址
各种类型的数据被分配合适的内存。比如整形数据通常被分配两个连续的存储单元(字节)存放。对数据的访问是通过分配给数据的内存首地址来实现的。我们称这些内存地址为指针。


二、指针变量是存放地址的变量
如果我们定义了一些变量来存放数据的地址(指针),这样的变量就是指针变量。也就是说,指针变量有两个特征:首先它作为变量会分配内存空间;其次,它存放的内容应该是内存地址。

比如,当我们声明了一个整形变量i并且赋予初始值10;同时我们声明了一个整形的指针变量p,将它指向变量i。当我们运行代码时,内存中可能是这样的:

i -> |0AH| FFF0H

|00H|FFF1H
|...|
p -> |0F0H | FFFAH

|0FFH|FFFBH

三、一维数组是指针,它指向数组首(元素)地址
1. 代码int a[3] = {1, 2, 3}; 定义了一个包含3个元素的整形一维数组。在引用数组元素时,我们使用“a[下标]”的格式;在引用数组时,我们直接使用数组名a。而数组名a表示(指向)数组首元素的地址(指针)

测试代码:
int a[3] = {1, 2, 3};
printf("a = %x\n", a);
printf("&a[0] = %x\n", &a[0]);

执行结果:
a= fff0
&a[0] = fff0


2. 由于一维数组是指针,所以可以按照指针来操作它: 一维数组指向数组首元素,所以在一维数组前加一元操作符“*”可以返回第一个元素的值。比如:


测试代码:
int a[3] = {1, 2, 3};
printf("*a = %x\n", *a);
printf("a[0] = %x\n", a[0]);

执行结果:
*a= 1
a[0] = 1


四、一维数组(名)不是指针变量
上面的测试代码中,数组名a是一个指针变量吗? 如果数组名a是一个指针变量,那么,它在应该会被分配独立的存储空间(有自己的地址),并且它的值应该是数组首地址,如图:


指针变量a -> | 0F0H | xxxxH

| 0FFH | yyyyH

...
元素a[0]-> |01H| FFF0H

|00H| FFF1H
|02H| FFF2H
|00H| FFF3H
|03H| FFF4H
|00H| FFF5H

下面,我们再做一个试验:
int a[3] = {1, 2, 3};
printf("&a = %x\n", &a);
printf("a= %x\n", a);
printf("*a = %x\n", *a);
printf("a[0] = %x\n", a[0]);

执行结果:
&a = fff0
a= fff0
*a = fff0
a[0] = 1


执行结果很奇怪,如果按照结果画出内存示意图,似乎是这样的:


指针变量a -> | 0F0H |FFF0H

| 0FFH |FFF1H

...
元素a[0]-> |01H|FFF0H

|00H|FFF1H
|02H| FFF2H
|00H| FFF3H
|03H| FFF4H
|00H| FFF5H


奇怪在哪里? ------ 怎么可能有两个内存空间的地址相同呢(FFF0H)? 当然不可能,这正好说明数组名a并不是一个指针变量因为它没有自己的存贮空间。这些奇怪的结果是编译器在编译期间根据另外的规则做出的处理。


推荐阅读

史海拾趣

Fong Ya Enterprise Co Ltd公司的发展小趣事

Fong Ya Enterprise Co., Ltd在电子行业中的发展故事

故事一:初创与基础奠定

Fong Ya Enterprise Co., Ltd(以下简称“丰雅企业”)成立于某个时期(具体年份可能因资料限制而未知),自那时起便致力于电子元件领域,特别是电阻器的研发与生产。初期,公司面临着市场竞争激烈、技术壁垒高等挑战,但凭借对电子技术的深刻理解和对市场需求的敏锐洞察,丰雅企业逐步确立了自身的产品定位,即专注于高品质、高性能的电阻器产品。通过不断优化生产工艺和提升产品质量,丰雅企业在电子行业逐渐站稳了脚跟。

故事二:技术创新与产品研发

随着电子行业的快速发展,丰雅企业深刻认识到技术创新的重要性。公司加大了对研发的投入,引进了一批高素质的技术人才,并建立了完善的研发体系。通过不断的技术创新,丰雅企业成功开发出了一系列具有自主知识产权的新型电阻器产品,这些产品不仅性能优越,而且满足了市场对电子元器件日益多样化的需求。同时,公司还积极与国内外知名高校和科研机构开展合作,共同推动电子元件技术的进步。

故事三:市场拓展与国际化战略

在稳固国内市场的同时,丰雅企业积极实施国际化战略,将目光投向了更广阔的国际市场。公司参加了多个国际性的电子展会,与全球各地的客户建立了良好的合作关系。通过提供优质的产品和服务,丰雅企业在国际市场上赢得了良好的口碑和信誉。此外,公司还根据不同国家和地区的市场特点,制定了差异化的营销策略,进一步扩大了市场份额。

故事四:供应链管理优化

为了提高生产效率和降低成本,丰雅企业不断优化供应链管理。公司与多家优质供应商建立了长期稳定的合作关系,确保原材料的质量和供应的稳定性。同时,公司还引入了先进的供应链管理系统,实现了对生产、采购、库存等各个环节的精细化管理。通过优化供应链管理,丰雅企业不仅提高了生产效率,还降低了运营成本,为企业的可持续发展奠定了坚实的基础。

故事五:品牌建设与企业文化

在多年的发展过程中,丰雅企业始终注重品牌建设和企业文化建设。公司坚持“质量第一、客户至上”的经营理念,致力于为客户提供优质的产品和服务。同时,公司还注重培养员工的创新精神和团队协作精神,营造了积极向上的企业文化氛围。通过品牌建设和企业文化的推动,丰雅企业在电子行业中的知名度和影响力不断提升,为企业的长远发展注入了强大的动力。

需要注意的是,由于具体年份和详细数据的限制,以上故事在描述时可能存在一定的概括性。然而,这些故事都基于丰雅企业在电子行业中的实际发展情况而构建,旨在展现其在技术创新、市场拓展、供应链管理和品牌建设等方面的努力和成就。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司自创立之初,就深知技术创新是电子行业的核心竞争力。公司投入大量资源进行研发,不断探索新的半导体材料和生产工艺。在一次偶然的实验中,AE&ST的研发团队发现了一种新型半导体材料,这种材料在能效和稳定性方面表现出色。公司迅速将这一发现转化为产品,并推向市场。新产品一经推出,便因其卓越的性能获得了市场的广泛认可,AE&ST公司因此获得了巨大的商业成功。

HIT(日立)公司的发展小趣事
对于可能产生热量的元件(如可控硅),应采取适当的散热措施,防止元件过热损坏。
DMEL Inc公司的发展小趣事

DMEL Inc公司成立于XX世纪初,最初由几位热衷于电子技术的工程师创立。他们凭借对半导体技术的深入研究,开发出了几款具有创新性的产品,这些产品在市场上获得了初步的成功。公司注重技术创新,不断投入研发资金,建立起了一支高效的研发团队。随着技术的不断积累,DMEL Inc逐渐在电子行业中崭露头角。

ddm hopt + schuler GmbH & Co KG公司的发展小趣事

ddm hopt + schuler GmbH & Co KG公司自创立之初,就专注于电子制造设备的研发与生产。在20世纪90年代,公司成功研发出一款具有革命性意义的自动化生产线,极大地提高了电子产品的生产效率和质量。这一技术突破迅速赢得了市场的认可,公司开始在全球范围内扩张业务,与多家知名电子品牌建立了长期合作关系。

Anders DX公司的发展小趣事

ddm hopt + schuler GmbH & Co KG公司自创立之初,就专注于电子制造设备的研发与生产。在20世纪90年代,公司成功研发出一款具有革命性意义的自动化生产线,极大地提高了电子产品的生产效率和质量。这一技术突破迅速赢得了市场的认可,公司开始在全球范围内扩张业务,与多家知名电子品牌建立了长期合作关系。

问答坊 | AI 解惑

谈谈简易PCB的手工制作

各位朋友在自己的维修或DIY过程中,经常会遇到需要制作一个应用电路的情况。这时我们首先就必须解决印刷电路板的问题。找个地方去买吧,你得寻找到相应的供货信息,再说联系购买也还有个过程你要能等得起。问题是你所需要的板子是否刚好就有得卖的 ...…

查看全部问答>

Power层电压分配的问题?

在Power层,只有一个电源网络吗?假设电路中有5V、+15V、-8V的电源,那么在电源层如何分配这些电源?电源层一般不都是直接大面积铺铜吗?我是新手,请各位前辈多多指教!谢谢!…

查看全部问答>

嵌入式

请问有谁能给我点嵌入式之路方面的建议嘛?…

查看全部问答>

使用VxWorks时出现了问题,请教各位,给点儿建议!cpu是MPC862

自己编了个小程序,在Tornador里结合VxWorks一起. 程序很简单,就是读存储器! xd0 = *(unsigned int *)(SDRAM_ADR); xd1 = *(unsigned int *)(BOOTFLASH_ADR); xd2 = *(unsigned short int *)(FLASH_ADR); 我的存储器有三种,一个是SDRAM,32位;一 ...…

查看全部问答>

热地和冷地,你听过吗?

热地:开关电源无需使用变压器,其开关电路的“地”和市电电网有关,既所谓的“热地”,它是带电的 冷地:由于开关电源的高频变压器将输入、输出端隔离;又由于其反馈电路常用光电耦合、既能传送反馈信号又将双方的“地”隔离;所以输出端的地称之 ...…

查看全部问答>

ST10资料上载

我有一批ST10的资料可以上载吗?供大家参考。大约10M的大小,对ST10的开发非常有帮助。…

查看全部问答>

关于IAR4.42和STM32疑难杂症(已解决.使用IAR5.30)

请各位大虾诊断!开发平台 (IAR4.42(带补丁)+ JLINK + STM32 + uCOS-II v2.86)写的源代码在自己的PC上运行很正常, 但把整个工程到其他两个同事的PC上都出现了同一个问题!系统中有一个TIM6的定时中断, ...…

查看全部问答>

STM32101VCT6SRAM(62256)cpld7128lcd12232测试版电路

attach]20052[/attach]原理图 这个是62256的电路,贴出来 下载 (950.99 KB) 2010-3-26 10:05 电路描述:FSMC_NADV经非门后接573的锁存脚,FSMC_NE1接62256的片选/CS,FSMC_NOE接62256的/OE,FSMC_NOE接62256的/WE STM ...…

查看全部问答>

【晒经典】集成运算放大电路篇

本帖最后由 dontium 于 2015-1-23 11:43 编辑 本帖主要回顾集成运放在电路中的使用,即集成运算放大电路,前两贴作为此贴的基础,我采用循序渐进的阐述方法   1.F007放大电路   F007是通用型集成运放,它由正负15V两路电源供电。从+ ...…

查看全部问答>

想换个万用表了

手头有个用了三四年的万用表。一个普及型很普通的DT9205三位半,厂家是 福克,是的是的,山寨之风吹响各个领域,虽然我不至于当初啥都不懂把它当成大名鼎鼎的福禄克,但我必须承认,我当时真因为这个名字才把它拿在手上开始琢磨。这东西也便宜,35 ...…

查看全部问答>