码迷,mamicode.com
首页 > 其他好文 > 详细

C的日记-指针续

时间:2015-04-16 23:41:12      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

【函数指针】

<1>什么是函数指针
    int a,b,c;
    int max(int,int);
    int (*p)(int,int);    //定义指针函数,指针变量活取函数地址
    p=max;
    c=(*p)(a,b)
    函数指针就是函数的起始地址,我们可以使用一个指向函数的指针变量来存储这个地址,当前的指针变量就指向这个函数。
    在第二行声明一个函数,第三行声明一个指向int类型的指针变量,而且这个指针变量后面[有对圆括号],这个就是指向函数的指针变量,我们想下,如果是int *p(int,int)会是怎样?由于(的优先级高,所以就是先声明了一个p(int,int)函数,这个函数返回的是指向整型变量的指针。
    第三句只是定义了一个指向函数的指针变量,并没有说明是什么函数,到了第四局把max函数首地址赋给指针变量才算是指定了函数。但此刻函数并没有运行,直到第5句利用函数指针变量调用函数的时候才执行了相应的内容。
<2>函数指针作函数参数
   在Main函数中把函数入口地址传递给处理函数的形参(函数指针变量),把函数要处理的数据传递给对应的形参,在处理函数是根据要处理的函数地址(函数指针变量)和接收到的数据进行输出。粗浅的理解为低耦合。

技术分享
    #include <stdio.h>
    void main(){
        int max(int,int);
        int min(int,int);
        int add(int,int);
        void fun(int x,int y,int(*p)(int,int));
        int a=2,b=3,c;
        printf("输入1/2/3\n");
        scanf("%d",&c);
        if(c==1){
            fun(a,b,max);
        }
        else if(c==2){
            fun(a,b,min);
        }
        else if(c==3){
            fun(a,b,add);
        }
    }
    void fun(int x,int y,int(*p)(int,int)){
        int result;
        result=(*p)(x,y);
        printf("%d\n",result);
    }
    int max(int x,int y){
        int z;
        if(x>y)z=x;
        else z=y;
        printf("Max is");
        return z;
    }
    int min(int x,int y){
        int z;
        if(x>y)z=y;
        else z=x;
        printf("Min is");
        return z;
    }
    int add(int x,int y){
        int z;
        z=x+y;
        printf("Sum is");
        return z;
    }
View Code

 

【返回指针的函数】
如:int *a(int x,int y);        //定义函数a,返回一个指向整形数据的指针
【指针数组】
如:int *a[5];    //定义指针数组,数组中的每一个元素都是指针变量
    由于[]的优先级比较高,先计算a[5]说明它是数组形式,前面加上×表示它是指针数组。
    注:int *a[5]和int (*a)[5]的区别
        后面这中形式表示指向一维数组(这个数组最大编号为5)的指针变量。
指针数组的应用:大多用来指向若干个字符串,如:
    char *name[]={"Fello me","Basic","Frotran","Computer class"};
    其中数组中存放的是各个字符串的首字符的地址,这么做的好处是节省空间,而且指针可以改变。如果用二维数组存储这些字符串,那么第一点数组的长度必须超过最长字符串的长度,这就造成了空间浪费;第二,数组移动字符串要比改变指针变量地址麻烦的多。


【指向指针数据的指针】
如:char **p; char c=‘a‘;
    *p=&c;    //
在定义时,char **P是二级指针,而在使用的时候,**p是指二级指针,存放的是一级指针变量的地址,*p是一级指针,存放的是变量的地址,p是‘a‘即变量的值;

C的日记-指针续

标签:

原文地址:http://www.cnblogs.com/yzxk/p/4433563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!