• C语言学习笔记 (009)


    一。给main函数传参:

    1 # include <stdio.h>
    2 
    3 int main(int argc,char **argv){
    4     printf("参数个数:%d,第一个参数“%sn",argc,argv[0]);
    5     return 0;
    6 }

    二。指向函数指针变量的定义

      在 C 语言中函数名代表了函数的入口,因此可以定义一种指向函数的指针来存放这种地址。例如:

    # include <stdio.h>
    
    int fun(int a,int *p){
        return a+*p;
    }
    
    int main(void){
        int (*fp)(int,int*);                /*这里的fp是一个指向函数的指针变量*/
        int y,n = 10;
        fp = fun;
        n =10;
        y = (*fp)(56,&n);
        printf("%d
    ",y);                    /*此处是通过指向函数的指针调用函数*/
        return 0;
    }

      在这里,说明符(*fp)(int,int *)说明fp是一个指向函数的指针变量,这个函数必须是int 类型。说明符中若略去了*fp 外的一对圆括号,写成 *fp(int,int*),则说明的fp就不是指针变量,而是说明 fp 是一个函数,该函数的返回值类型是基类型为 double 的指针类型,这些类型名应与所指的函数参数的类型一一对应。如果所指函数没有形参,这一对圆括号也不能省略。

      表达式fp = fun 把 fun 函数的地址赋予指针变量fp,此处 fp 的类型必须与 fun 的类型相同。语句 y = (*fp)(56,&n);实现对函数的调用,它相当于 y = fun(56,&n);

    三。函数名或指向函数的指针变量作为实参:

      函数名或指向函数的指针变量作为实参传给函数。这时,对应的形参应当是类型相同的指针变量:例如通过给 tran 函数传递不同的函数名,求tan x 和 cot 想值。

     1 #include<stdio.h>
     2 #include<math.h> 
     3  
     4 //声明函数tran的原型,该数的返回值为double类型,
     5 //tran函数第一个和第二个参数类型为返回值是double类型 形参是double类型的函数指针
     6 //第三个参数为double类型变量 
     7 double tran(double (*)(double), double (*)(double), double );
     8  
     9 int main(){
    10     double y,v;//定义y,v变量他们的类型为double类型
    11     v=60*3.1416/180.0; //给变量v赋值,v的值为 60*3.1416/180.0
    12     y=tran(sin,cos,v); //调用tran函数,传入sin,cos函数的指针 以及v变量
    13     printf("tan(60)=%10.6f
    ",y);//输出y的值,按照格式10个位宽,精确到小数点后6位
    14     y=tran(cos,sin,v);//调用tran函数,传入cos,sin函数的指针 以及v变量 
    15     printf("cot(60)=%10.6f
    ",y);//输出y的值,按照格式10个位宽,精确到小数点后6位
    16     return  0; 
    17 } 
    18 //实现tran函数
    19 double tran(double (*f1)(double),double (*f2)(double), double x) {
    20     return (*f1)(x)/(*f2)(x);//比方说第一次调用的时候传入的是sin,cos,v,那么结果就是sin(v)/cos(v) 
    21 }

      函数 tran 有三个形参数 f1,f2,x。其中 f1 和 f2 是两个指向函数的指针变量,他们所指的返回值必须是 double 类型,所指函数有一个 double 类型的形参;第三个参数 x 是 double 类型的简单变量。

  • 相关阅读:
    五、Django之路由系统
    四、Django设置相关
    三、Django安装和流程
    二、Web框架实现
    Flask学习-Wsgiref库
    设计模式之设计模式六大原则(三大基本原则)【1】
    Linux之更改Nginx映射默认根目录
    顺序列表(栈/队列等)ADT[C++]
    [C++]数组与指针(纯代码-复习用)
    [C++]指针与多级指针(图解)
  • 原文地址:https://www.cnblogs.com/jikexianfeng/p/7482755.html
Copyright © 2020-2023  润新知