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

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

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

r1=fbuf;

2 指针与整数的加减

指针可以与一个整数或整数表达式进行加减运算,从而获得该指针当前所指位置前面或后面某个数据的地址。假设p为一个指针变量,n为一个整数,则p+n表示离开指针p当前位置的后面第n个数据的地址。

3 指针与指针相减

指针与指针相减的结果为一个整数值,但它并不是地址,而是表示两个指针之间的距离或元素的个数,注意,这两个指针必须是指向同一类型的数据。

4 指针与指针的比较

指向同一类型数据的两个指针可以进行比较运算,从面获得两指针所指地址大小的关系,此外,在计算指针地址的同时,还可以进行间接取值运算,不过在这种情况下,间接取值的地址应该是地址计算后的结果,并且还必须注意运算符的优先级和结合规则。如下设p1是一个指针

a= *p1++;

*与++优先级相同,所以上述赋值操作过程是首先将指针p1 所指向的内容赋值给变量a, 然后p1再指向下一个数据,表明是地址增加而不是p1所指向的变量内容增加。

a=* - -p1;

与上例相同,此处是先p1减一,指向前面一个数据,然后再把p1此时所指向的内容赋给变得a

a=(*p2)++;

此处,由于使用了括号,使得结合次序发生了变化,因此首先是将p2所指的内容赋值给变量a,然后再把p2所指向的变量加1,表明是p1所指变量的大小加一,面不是p1指向下一个元素。

(7).函数型指针

函数不是变量,但它在此内存中仍然需要占据一定的存储空间,如果将函数的入口地址赋给一个指针,该指针就是函数型指针,由于函数型指针指向的是函数的入口地址,因此可用指向函数的指针代替函数来调用该函数。利用函数指针,可以将函数作为参数传递给另一个函数,此处还可以将函数型指针放在一个指针数组中,则该指针的数组中每一个元素都是指向某个函数的指针。

函数型指针定义形式:

数据类型 (*标识符)();

标识符为所定义的函数型指针变量名,数据类型说明了该指针指向函数的返回值类型。例如:

Int ( *func1)( );

注:函数型指针变量是专门用来存放函数入口地址的,在程序中把哪个函数的地址赋给它,它就指向那个函数,在程序中可以对一个函数型指针多次赋值,该指针可以先后指向不同的函数。后面括号中不要加形参表。

函数型指针赋值形式

函数型指针变量名=函数名

注,赋值时不带形参表,如有一个max(x,y), 可做执行如下操作

func1=max;

引入了函数型指针后,对函数的调用就可以采用如下两种方法。

A: z=max(x,y);

B: z=( *func1)(x,y);

注意 若采用函数型指针来调用函数,必须预先对该函数指针进行赋值,使之指向所需调用的函数。

函数型指针通常用来将一个函数的地址作为参数传递到另一个函数中去,这种方法对于要调用的函数不是某个固定函数的场合特别适用。

作如下示例让你更加明白

#include

int max( int x,int y)

{

if(x>y)

return(x);

else

return(y);

}

int min(int x,int y)

{

if(x

return(x);

else

return(y);

}

int add(int x,int y)

{

return(x+y);

}

int process(int x,int y, int( * f)( ) )

{

int result=f(x,y );

printf(“%d\n”,result);

}

main()

{

int a,b;

printf(“Please input a and b:\n”);

scanf(“%d %d”,&a,&b);

printf(“max=”);

process(a,b,max);

printf(“min=”);

process(a,b,min);

printf(“sum=”);

process(a,b,add);

}

本例中三个函数max(),min(),add(),在第一次调用process( )函数时,除了将a b作为实参传递给了形参,还将函数名max作为实参将其入口地址传递给了process( )函数中的形参——指向函数的指针变量*f。process()中的函数调用语句,result=f(x,y)就相当于result=max(x,y),第二次调用时用了min作为实参,第三次用了add.从而实现每次调用process( )函数时完成了不同的功能。

(8).返回指针型数据的函数

在函数的调用过程结束时,被调用的函数可以带一个整形,字符等到类型的数据,也可以带一个指针型数据。即地址。这种返回指针型数据的函数又称为指针函数。

注意区别指针函数与函数指针。

指针函数定义如下:

数据类型 * 函数名(参数表);

其中数据类型说明了所定义的指针函数返回的指针所指向的数据类型。

int *x(a,b);

就定义了一个指针函数*x调用它以后可以得到一个指向整型数据的指针。注意*x 两则没有括号。这与函数指针是完全不同的,并且定义函数指针时,后面的括号是不加形参表列的。也很容易混淆。下面分别定义一个指针函数和函数指针。

函数指针: int (*x)( );

指针函数: int *x(char

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

网站地图

Top