zoukankan      html  css  js  c++  java
  • 不要伤害指针(4)--指针和函数的关系

    可以把一个指针声明成为一个指向函数的指针.
    int fun1(char *,int);

    int (*pfun1)(char *,int);

    pfun1 = fun1;

    int a = (*pfun1)("abcdefg",7); //通过函数指针调用函数。可以把指针作为函数的形参。在函数调用语句中,可以用指针表达式来作为实参。

    完全可以想象在内存的代码区有一个对象,通过这个对象.某个函数可以运行这个函数。我们这里的函数名和函数指针都是指向这个对象的。所以下面的几种调用都是合法的。

    
    
    #include <stdio.h>
    #include <stdlib.h>
    
    int func(char *s)
    {
        int num = 0;
    
        while(*s != '')
        {
            num += *s;
            s++;
        }
    
        return num;
    }
    
    int main(void)
    {
        char str[] = "abc";
        int (*pfunc)(char *s);
        pfunc = func;
        //各种合法的调用
        printf("%d
    ", (*pfunc)(str));//通过对象实体调用
        printf("%d
    ", (*func)(str));//通过对象实体调用
        printf("%d
    ", func(str));//通过指针调用
        printf("%d
    ", pfunc(str));//通过指针调用
    
        system("pause");
        return 0;
    }

    这个例子中的函数fun 统计一个字符串中各个字符的ASCII 码值之和。前面说了,数组的名字也是一个指针。在函数调用中,当把str作为实参传递给形参s 后,实际是把str 的值传递给了s,s 所指向的地址就和str 所指向的地址一致,但是str 和s 各自占用各自的存储空间。在函数体内对s 进行自加1 运算,并不意味着同时对str 进行了自加1 运算

  • 相关阅读:
    自定义view代码
    省份封装代码
    监听锁屏广播,开启1个像素的Activity
    双进程守护
    新增,查询,删除,修改下方即可
    #Android笔记#解决textview使用SpannableString实现图文混排并设置了行高时,图片与文字显示混乱
    显示地图
    局部页面传值Model
    JS的跳转
    helper实现隐藏前台特效
  • 原文地址:https://www.cnblogs.com/stemon/p/4153049.html
Copyright © 2011-2022 走看看