当前位置:首页 > 单片机 > 单片机
[导读] C语言中的指针和数组几乎可以互换,数组名可认为是一个常量指针,指针可用来完成涉及数组下标的操作。e.g.int * nPtr;int Array[size];(1)数组与指针等价nPtr = Array;或者nPtr = &Array[0];(2)引

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("%sn",*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');
}
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

万用表是一种可以测量多种项目的便携式仪表,在电子技术中主要用来测量电压、电流与电阻。在电子元器件选用中,它可用来粗略检测元器件的好坏或性能优劣

关键字: 指针 万用表

万用表又称为复用表、多用表、三用表、繁用表等,是电力电子等部门不可缺少的测量仪表,一般以测量电压、电流和电阻为主要目的。万用表按显示方式分为指针万用表和数字万用表

关键字: 指针 万用表 数字万用表

字符串是C语言中最基础的概念,也是最常被用到的。在嵌入式开发中,我们经常要将一些字符串通过串口显示到串口助手或调试终端上,作为信息提示,以便让我们了解程序的运行情况;或者是将一些常量的值转为字符串,来显示到液晶等显示设备...

关键字: 字符串 指针 C 语言

指针使得 C 语言能够更高效地实现对计算机底层硬件的操作,而计算机硬件的操作很大程度上依赖地址,指针便提供了一种对地址操作的方法,在一定意义上,指针是c语言的精髓,所以一定要耐心看完。指针对于很多c语言初学者来说可能难以...

关键字: 指针 C 语言 计算机

有深入理解RTOS原理,或阅读过RTOS源码的同学应该知道:RTOS实现任务间通信通常是由一系列指针进行操作实现的。

关键字: RTOS 指针 数组

实际上函数指针本质也是一个指针,只不过这个指针指向的不是内存中的一段数据而是内存中的一段代码

关键字: 指针 数据 代码

摘  要:数组是程序设计课程中的重点内容,如何使学生灵活熟练地掌握数组,案例内容的设计是教学关键点之一。文中提出一种案例循序递进的教学方法,把学科竞赛中超大数运算问题引入到数组实践教学中。实践结果证明此案例教学法有助于调...

关键字: 案例教学法 实践教学 数组 超大数

C 为什么不加入垃圾回收机制!

关键字: 垃圾回收 指针

记得刚开始工作时,一位高手告诉我,说,longjmp和setjmp玩得不熟,就不要自称为C语言高手。

关键字: 指针 C语言 longjmp

C ++ 的连载教程就到此结束了,所涉及的内容也只是 C++ 中很浅显的一部分。

关键字: C 指针
关闭
关闭