关闭

函数的指针、大程序设计的基本事项

198人阅读 评论(0) 收藏 举报
分类:

不知道大家有没有试过这样的一件事情,输出一个函数的地址或者main的地址。大家可能会感到好奇,这也可以输出?答案是可以的大家可以这自己的电脑试一下这样的一件事情,printf("%p",main),输出函数的地址的话,我举个例子把比如void f(void){  }我们要输出的话就是这样printf("%p",f);那我们怎么定义函数指针呢?其实就是void(*pf)(void)=f;然后我们在要调用的时候就(*pf)();就可以了。

大程序设计的一些需要注意的点吧,就是在函数前如果加了static它就成为了只能在当前编译单元所使用的,如果是全局变量加上了static它就只能成为在所在编译单元使用的了。

关于函数的指针我们还可以这么用,如果想要知道这个函数指针的长度我们就用sizeof(fa)/sizeof(fa[0]);

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
void f(int i)
{
    printf("f %d",i);
}
void g(int i)
{
    printf("g %d",i);
}
void h(int i)
{
    printf("h %d",i);
}
int main()
{
   int i=0;
   void(*fa[])(int)={f,g,h};
   (*fa[0])(0);//因为调用的*fa[0]所以输出的是f 0;
}
我们还可以定义一个函数拿另一个函数作为该函数的参数,这样输出的就是5和-1
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int Plus(int a,int b)
{
    return a+b;
}
int Minus(int a,int b)
{
    return a-b;
}
void cal(int (*f)(int,int))
{
    printf("%d",(*f)(2,3));
}
int main()
{
    cal(Plus);
    printf("\n");
    cal(Minus);
    return 0;
}

0
0
查看评论

程序设计的基本要素

数类型有:八基本 类定义运算符有  :算数值 比大小 判真假 取赋值 位运算流控制有:两选择 三循环 流跳转 函调用  说明:数据类型主要有boolean char byte int short long float double八种基本类型 和类类型运算符主要有:数值...
  • ironcat
  • ironcat
  • 2006-09-13 09:00
  • 910

程序设计的三种基本结构

任何简单或者复杂的算法都可以由顺序结构、选择结构和循环结构这三种基本结构组合而成。所以这三种结构被称为程序设计的三种基本结构,也是程序化程序设计必须采用的结构。 顺序结构 图1 顺序结构 顺序结构表示程序中...
  • yaoyafeng92
  • yaoyafeng92
  • 2017-02-24 11:48
  • 3030

指针(大小比较)等

我是由下面的例子来理解的:  顺序表的插入算法 status ListInsert(List *L,int i,ElemType e) { struct STU *p,*q; if (iL->length+1) return ERROR; ...
  • cange521
  • cange521
  • 2014-01-14 01:36
  • 512

指针函数应用——例8.22 用函数求整数a和b中的大者。(通过函数名调用函数、通过指针变量访问它所指向的函数)

解题思路:定义一个函数max,实现求两个整数中的大者。在主函数调用max函数,除了可以通过函数名调用外,还可以通过指向函数的指针变量来实现。分别编程并作比较。 (1)通过函数名调用函数 #include int main() {int max(int,int); int a,b,c; p...
  • zhuyan020389
  • zhuyan020389
  • 2013-07-25 09:23
  • 1135

面向对象三大特性,五大原则

以前一直认为程序中的类有使用到封装继承多态就是面向对象设计,其实不然 封装,继承,多态只是面向对象的三大特性,但是在设计程序的时候并不是说类的结构使用到了(或是体现出了)这三个特性就是面向对象, 其实真正的面向对象设计是要符合下面的五大原则, 面向对象的五大基本原则 单一职责原则(SRP) 开...
  • xtzmm1215
  • xtzmm1215
  • 2015-07-18 22:28
  • 6547

C++ 程序设计基本概念 知识点 小结

知识点包括:全局变量的二次赋值;计算转化为二进制后,数字中 1 的数量;用一个非循环表达式判断一个数是否是2的N次方;逻辑运算与位逻辑运算;printf 输入表达式的执行顺序;位运算判断输入参数是否为2的幂次;位运算两个数值的取平均与求和;无判断语句求取变量中较大存在;无中间量交换变量;C/C++关...
  • u013630349
  • u013630349
  • 2015-08-12 14:19
  • 1333

Python--基础程序设计

一 简单的程序1.Pyhton 会通过赋值给变量自动判定数据类型2.打印多项print(item1,item2,...,itemk) 3.程序一(计算圆的面积)radius = 20 # radius is now 20 area =radius * radius *3.14159 print(&q...
  • wangtao0921
  • wangtao0921
  • 2016-01-04 10:11
  • 446

指向函数的指针(一)

之所以想写一篇函数指针的文章,源于函数指针在C/C++编程中使用的广泛性,而对于一些初级编程者来说对函数指针的使用或许有些迷惑,而一旦在适当的时候使用了函数指针,会使代码简洁有力。本篇介绍的是函数指针的基础部分,函数指针复杂的应用将在下一篇介绍。 一  指向普通函数的指针 先来看一个函...
  • hzyong_c
  • hzyong_c
  • 2012-04-16 00:08
  • 14291

MFC 对话框程序设计

MFC 对话框程序设计
  • daoming1112
  • daoming1112
  • 2017-01-23 23:49
  • 247

c语言:利用指针变量,用函数实现将3个整数按从大到小的顺序输出

利用指针变量,用函数实现将3个整数按从大到小的顺序输出。解:程序:#includevoid swap(int *ptr1, int *ptr2){ int temp = *ptr1; *ptr1 = *ptr2; *ptr2 = temp;}void exchange(int *q1, int *q...
  • yanxiaolx
  • yanxiaolx
  • 2016-05-29 13:42
  • 3972
    个人资料
    • 访问:93287次
    • 积分:6556
    • 等级:
    • 排名:第4361名
    • 原创:570篇
    • 转载:38篇
    • 译文:0篇
    • 评论:11条
    最新评论