历史上的今天
返回首页

历史上的今天

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

正在发生

2018年01月05日 | C51学习心得体会,指针和数组在程序设计中的关系

2018-01-05 来源:eefocus

C语言中的指针和数组几乎可以互换,数组名可认为是一个常量指针,指针可用来完成涉及数组下标的操作。

e.g.int * nPtr;

int Array[size];

(1)数组与指针等价

nPtr = Array;或者nPtr = &Array[0];

(2)引用数组元素Array[3]

nPtr[3]或者*(nPtr+3)或者*(Array+3)

其中,nPtr[3]为指针下标表示法。

(3)e.g.数组拷贝

//用数组表示法把s2拷贝到s1中

void copy1(char *s1,constchar *s2)

{

int i

for(i=0;s1[i]=s2[i];i++);

}

//用指针表示法把s2拷贝到s1中

void copy1(char *s1,constchar *s2)

{

for(;* s1=* s2;s1++,s2++);

}

(4)指针数组

char * suit[4]={"zhonghua","renmin","gonghe","guojia"};

//char * 表示suit数组的每一个元素都是指向char类型的指针,即suit数组中存储的是4个指针。

//等价于 char suit[4][9]={"zhonghua","renmin","gonghe","guojia"};

//二维数组必须设置相同的列数,因此指针数组更具有灵活性。

(5)数组指针

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int (*p)[4];

p=a;

*(*(p+i)+j);//表示a[i][j]的值

void search(float (*p)[4],int n);//多维数组的指针作为函数参数

search(a,2);//函数调用

(6)指向指针的指针

e.g. main()

{

char *name[]={"Beijing","Chongqing","Shanghai","Tianjin","Shijiazhuang"};

char **p;

int i;

for(i=0;i<5;i++)

{ p=name+i;

printf("%s\n",*p);//如果是**p,表示一个字符。

}

}


举例:洗牌和发牌程序

#include
#include
#include

void shuffle(int [][13]);//为什么参数中数组的第二个下标必须有
void deal(const int [][13],const char * [],const char * []);

main()
{
int deck[4][13]={0};
constchar * face[4]={"Hearts","Diamonds","Clubs","Spades"};//指针数组

constchar * suit[13]={"one","two","three","four","five","six","seven",
"eight","nine","ten","eleven","twelve","theteen"};
srand(time(NULL));
shuffle(deck);
deal(deck,face,suit);* face[4]和* suit[13]数组必须定义成const,否则在此出现错误,

//错误类型:不能把“* char[]”转换成“const * char[]”
return 0;
}


void shuffle(int wDeck[][13])
{
int row,col,i;
for(i=1;i<53;i++)
{
row=rand()%4;
col=rand()%13;
while(wDeck[row][col]!=0)
{
row=rand()%4;
col=rand()%13;
}
wDeck[row][col]=i;
}
}


void deal(const int wDeck[][13],const char * wFace[],const char * wSuit[])
{
int i,row,col;
for(i=1;i<53;i++)
for(row=0;row<4;row++)
for(col=0;col<13;col++)
{
if(wDeck[row][col]==i)
printf("%5s of %-8s%c",wFace[row],wSuit[col],i%2==0?'\n':'\t');
}
}


推荐阅读

史海拾趣

CAMBION公司的发展小趣事

在追求经济效益的同时,CAMBION公司也注重可持续发展和社会责任。公司积极推广环保理念,采用环保材料和节能技术生产电子产品。此外,CAMBION还关注社会公益事业,通过捐款、设立奖学金等方式支持教育事业和弱势群体。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

以上五个故事是基于电子行业的一般发展趋势和可能面临的挑战而构想的,它们并不特指CAMBION公司的实际发展经历。如需了解CAMBION公司的真实故事,建议查阅相关新闻报道、行业报告或公司官方资料。

First Silicon Co., Ltd公司的发展小趣事

在电子行业快速发展的同时,环保问题也日益受到关注。First Silicon公司积极响应国家环保政策,将环保理念融入企业发展战略之中。公司投入巨资研发环保型半导体材料和生产工艺,努力减少生产过程中的污染排放和资源浪费。同时,公司还积极推广绿色电子产品,引导消费者树立环保意识。通过这一系列的环保举措,First Silicon不仅赢得了社会各界的广泛赞誉,还为其可持续发展奠定了坚实基础。

EPIC公司的发展小趣事

2006年,Epic Games公布了基于Xbox 360游戏平台的《战争机器》。这款游戏以其出色的画面效果、紧张刺激的战斗场景和深入人心的故事情节,迅速在市场上取得了成功。它的畅销不仅进一步巩固了Epic Games在游戏开发领域的地位,也证明了虚幻引擎在开发高质量游戏方面的强大能力。

Boundary Devices公司的发展小趣事

作为一家有社会责任感的企业,Boundary Devices始终关注环境保护和可持续发展。公司在生产过程中积极采用环保材料和技术,减少对环境的影响。同时,公司还积极参与社会公益活动,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上五个故事基于Boundary Devices公司的发展背景和电子行业的一般趋势进行创作,旨在展示该公司在不同阶段的成长与发展。然而,实际的公司发展历程可能更加复杂和丰富,需要更多的资料和信息来深入了解。

Enovation Controls LLC公司的发展小趣事

Boundary Devices公司成立于2003年,总部位于美国亚利桑那州。创立之初,公司便专注于嵌入式系统硬件的开发与生产,凭借对技术的深刻理解和市场需求的敏锐洞察,Boundary Devices迅速在行业中崭露头角。其推出的Boundary Devices插座和适配器,因其兼容性强、性能稳定而备受市场青睐。同时,公司与NXP/Freescale建立了紧密的合作关系,共同推进i.MX系列处理器的应用与发展,为公司的后续发展奠定了坚实的基础。

Concord Semiconductor Corp公司的发展小趣事

随着业务规模的不断扩大,Concord Semiconductor Corp开始将市场拓展作为重要的发展战略。公司通过参加国际电子展会、举办技术研讨会等方式,积极宣传自己的产品和技术,提升品牌知名度。同时,公司还针对不同地区的市场需求,推出定制化产品和服务,进一步巩固了市场地位。

问答坊 | AI 解惑

功放电路分享

本帖最后由 paulhyde 于 2014-9-15 09:28 编辑 大家看看a啊 呵呵 分享下  …

查看全部问答>

运放的温飘温飘

前级输入为4-20mA电流信号,在200偶的电阻上形成取样电压,R224后面就到AD了。 除R237电阻外,其余电阻均为1%,50PPM的电阻,加温到60度左右,AD变化非常大,大概有0.5%的变化,如何才能降低温漂?失调电流,失调电压,偏置电压如何补偿? 参考的 ...…

查看全部问答>

keil学习(五)

Keil 程序调试窗口 上一讲中我们学习了几种常用的程序调试方法,这一讲中将介绍 Keil 提供各种窗口如输出窗口、观察窗口、存储器窗口、反汇编窗口、串行窗口等的用途,以及这些窗口的使用 方法,并通过实例介绍这些窗口在调试中的使用。 一、 ...…

查看全部问答>

无线传感器网络LEACH

      无线传感器网络中用LEACH协议进行分簇后,簇内想采用局部的TDMA机制,这样的话,相邻的各个簇之间会产生干扰。目前考虑到了两种解决方法:       一种是采用采用直接序列扩频技术,即各个簇采用不 ...…

查看全部问答>

嵌入式操作系统

现有一款简单开发板,cpu为ARM系列的S3C2410,板上有boot flash、SDRAM、串口、Intel 82559 PCI 网卡,其所需硬件设备驱动程序均已放在BSP相应目录下,请为这款开发板搭建一个完整的VxWorks交叉开发环境(包括使用到的软硬件设备、连接方式、启动代 ...…

查看全部问答>

PC机如何通过智能手机收发短信

是Smartphone 想做一个类似智能手机工作室的软件,但是不需要那么复杂,只要能收,发,删除短信就可以了. 请朋友们给我些意见,我是用过sms.dll来发短信,但是读短信就不知道怎么做了.我用的C#…

查看全部问答>

学习arm,该看什么书呢?

搞wince驱动,想掌握下arm的体系结构,该看什么样的书呢,…

查看全部问答>

实时时钟M62X42B的计时过快问题

请问M62X42B计时过快过快是什么问题,我读M62X42B的寄存器的值,变换很快,理论上应该是1s变化一次,而我写的程序基本上都是小时级别的递增?请问高手,一般出现这种情况都什么什么原因引起的。…

查看全部问答>

stm32从片内SRAM加载/存贮数据要4个周期.

                                 数据处理性能太打折扣.…

查看全部问答>