微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机基础剖析(基于C语言)

51单片机基础剖析(基于C语言)

时间:11-20 来源:互联网 点击:

a,b)

如下示例,指针函数的应用

#include

main()

{

Float T[3][4] = {{60.1,70.3,80.5,90.7},

{30.0,40.1,50.2,60.3},

{90.0,80.5,70.4,60.6}};

float * search(float (*pointer)[4],int n);

float *p;

int i, m;

printf(“please enter the number of chanal:”);

scanf(“%d”,&m);

printf(“\n The temperature of chanal %d are: \n”,m);

p=search(T,m);

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

printf(“%5.1f”,*(p+i));

}

float *scarch(float (*pointer)[4],int n)

{

float *pt;

pt=*(pointer+n);

return(pt);

}

上程序中,红色标出来的那一行是定义了一个指针型函数,它的形参pointer是指向包含4个元素的一维数组的指针变量。于是pointer+i 就是指向二维数组T的第i行,而*(pointer+i)则指向第i行的第一个元素。pt是一个指针变量。调用search( )后,返回了一个指向第m行的首地址,

(9).指针数组

由于指针本身也是一个变量,因此C语言允许定义指针数组,指针数组适合用来指向若干个字符串,使得字符串的处理更加方便。指针数组的定义方法与普通数组完全相同,一般格式如下:

数据类型 * 数组名[数组长度];

例如:

int *x[2];

char *sptr[5];

指针数据在使用之前往往需要先赋初值,方法与一般数组赋初值类似,。使用指针数组最典型的场合就是通过对字符数组赋初值而实现各维长度不一致的多维数组的定义

#include

main( )

{

int i;

char code *season[4]={“spring”,”summer”,”fall”,”winter”};

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

printf(“\n%c--------%s”,*season[i],season[i]);

}

程序执行结果:

s--------spring

s--------summer

f--------fall

w--------winter

在这个例子中,在code区定义了指向char型数据的4个指针,其初值分别为“spring”,”summer”,”fall”和”winter,这样可以使这四个数组保存在一段地址连续的地址空间里(此可以通过程序验证),如果采用二维数组,那么会造成内存空间的浪费。因为二维数组的长度必须一致,且要等于最大的一列长度。

下面写一个(经典)示例程序(不做解释)

#include

char code daytab[2][13]=

{

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31},

};

char *mname(int n)

{

char code *mn[]=

{

“llligal month”,”january”,”February”,

“March”,”April”,”May”,”June”,

“July”,”August”,”September”,

“October”,”Novenmber”,”December”

};

return((n<1||n>12)?mn[0];mn[n]);

}

monthday( int y,int yd)

{

int i,leap;

leap=y%4==0&&y%100!=0||y%400==0;

for(i=1;yd>daytab[leap][i];i++)

yd-=day[leap][i];

printf(“%s,%d\n”,mname(i),yd);

}

main( )

{

int year,yearday;

printf(“input year and yearday: \n”);

scanf(“%d,%d”,&year,&yearday);

monthday(year,yearday);

}

(10).指针型指针

指针型指针所指向的是另一个指针变量的地址,故有时也称为多级别指针。

定义指针型指针的一般形式:

数据类型 标识符

标识符: 定义的指针型指针变量。

数据类型: 说明一个被指针型指针所指向的指针变量所指向的变量数据类型。

#include

main( )

{

int x,*p,q;

x=10;

p=&x;

q=&p;

printf(“ %d\n ”,x); //直接取值

printf(“ %d\n ”, *p); //单重间接取址

printf(“ %d\n ”, q); //多重间接取址

}

三行均是打印出10.

一个指针型指针是一种间接取值的形式,而且这种间接取值的方式还可以进一步延伸,故可以将这种多重间接取值的形式看成一个打针链

使用指针型指针的例子

#include

main( )

{

char i;

char j;

char *season[4]={ “spring”,”summer”,”fall”,”winter”} ;

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

{

j=season+i;

printf(“\n%c--------%s”,*season[i] , *j);

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top