历史上的今天

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

正在发生

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

发布者:茶叶侠 来源: eefocus关键字:C51  指针  数组 手机看文章 扫描二维码
随时随地手机看文章

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');
}
}


关键字:C51  指针  数组 引用地址:C51学习心得体会,指针和数组在程序设计中的关系

上一篇:I2C总线的工作原理与在51单片机中的应用
下一篇:C51中断应用interrupt 和 using

推荐阅读

国外知名调研机构IC Insights近日发布了2017年全球前十大Fabless排名。国内有两家厂商跑进了前十名,那就分别是海思和紫光集团(包括了展讯和RDA),这两者分别以47.15亿美元和20.50亿美元的收入分居第七位和低10位,其中海思的同比增长更是达到惊人的21%,仅仅次于去年火热的英伟达和AMD,在Fabless增长中位居全球第三。根据IC Insights预测,2017年Fab...
最近,北京一家新开业的智能餐厅成了“网红”。在这家餐厅,不仅各类菜品由机器人掌勺,点餐、结账也都是机器人做主角。 随着人工智能技术的不断突破,智能机器人产业进入蓬勃发展阶段。作为全球第一大工业机器人消费市场及第一大潜在的服务机器人市场,中国智能机器人产业未来的路怎么走?专家表示,应抓住智能机器人产业重塑的机遇,集中优势资源,...
寄生虫可以改变寄主的行为,以达到自身更好地繁殖生存的目的。人类若受到一些寄生在脑部的寄生虫,如终生寄生在脑部的弓形虫(Toxoplasmosis),反应能力会降低。 于高度结构化的环境中,远程遥控操作是一种有价值的,在这种环境中会遇到各种各样的场景和对象。在这种情况下,机器人可以比完全自主的操纵更快,更轻松地依靠人类的认知来处理极端情况。...
今年以来,国内智能家居市场热度持续上升,智能音箱、扫地机器人、智能无线耳机等产品的销量,更是迎来了大幅增长。据天猫双11购物节数据显示,今年双11购物节,仅扫地机器人家电产品在天猫平台的销量,就超过了12万台。而在扫地机器人产品销量爆火的背后,离不开科沃斯、云鲸智能科技、奇虎360等多家企业的推动和助力。特别值得一提的是,作为扫地机器人...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved