51单片机基础剖析(基于C语言)
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);
}
}
51单片机C语 相关文章:
- Proteus运行Keil编写的51单片机C语言步骤(11-30)
- 《世上只有妈妈好》51单片机C语言程序(11-26)
- 51单片机C语言编程中对单片机绝对地址访问的两种方法(11-26)
- 硬件仿真器会不会被淘汰(11-26)
- 51单片机C语言头文件及其使用(11-26)
- 51单片机的C语言延时的一些总结(11-25)