上一篇文章地址:http://blog.csdn.net/qmhlan/article/details/6640429(指针系列)
1.指向指针变量的指针称为指针的指针
定义形式:类型 **变量名
例如:int i,*p,**q;
i = 30;
p = &i;
q = &p;//指针q指向p指针
2.指针与函数
a.指针做函数参数
b.指针函数
c.指向函数的指针
a.例子:
swap(int *pa,int *pb)
{
int p;
p = *pa;
*pa = *pb;
*pb = p;
}
main( )
{
int a,b;
int *p1,*p2;
scanf("%d%d",&a,&b);
p1 = &a,p2 = &b;
if(a<b)
swap(p1,p2);
printf("\n%d,%d\n",a,b);
}
从键盘输入:5 10
输出:10,5
看下面一个例子
main()
{
int a,b;int *p1,*p2;
void swap(int *pa,int *pb);
scanf("%d,%d,&a,&b);
p1=&a;p2 =&b;
if(a<b)
swap(p1,p2);
printf("\n%d,%d\n",a,b);
}
void swap(pa,pb)
{
int *pa,*pb;
int *p;
p = pa;
pa = pb;
pb = p;
}
从键盘输入:5 10
输出:10,5
指针函数:
一个函数可以返回整型值,实型值,字符型值,也可以返回指针类型的数据,即地址。
返回值是指针类型的函数,称为指针函数。
一般定义形式为:
类型标识符 *函数名(参数表);
例如: int *a(int x,float y)
{......}
a是函数名,调用它后能得到一个指向整型数据的指针(地址)
x,y是函数a的形参
这个函数前面有个*,表示次函数是指针类型函数
例如:
main()
{
int a,b,*p;
int *max(int,int);
scanf("%d%d",&a,&b);
p= max(a,b);
printf("max=%d",*p);
}
int *max(int x,int y)
{if(x<y)
return (&y);
else return (&x);
指向函数的指针:
函数名代表函数的入口地址
指向函数的指针的定义方式:类型 (*指针变量名)( );
例如:int (*p) ( );
应用举例:
int max(...)
{......}
int (*p)( );//定义指向函数的指针变量
p = max;//作用是使p指向max函数的入口地址,可以通过(*p)()来调用max
Example:
main()
{
int max();
int (*p)();//定义函数指针
int a,b,c;
p = max;
scanf("%d%d\n",&a,&b);
c = (*p)(a,b);//调用函数
printf("a=%d,b=%d,max=%d",a,b,c);
}
int max(x,y)
{
int z;
if(x>y) z = x;
else z= y;
return (z);
}