首页 > 其他分享 >指针函数和函数指针(C语言)

指针函数和函数指针(C语言)

时间:2022-09-02 19:23:34浏览次数:53  
标签:函数 point int sum C语言 fuc 函数指针 指针

@

目录

指针函数

指针函数就是指针型函数,该函数返回一个地址。

#include <stdio.h>
//指针函数*point_fuc()
int *point_fuc(int a,int b,int *sum)
{
    *sum = a+b;
    return sum;//返回sum的地址
}
int main(void)
{
    int sum;
    printf("一开始sum的地址和值:%p,%d\n",&sum,sum);
    int *p = point_fuc(1,5,&sum);//用指针p指向sum的地址
    printf("返回值后sum的值=%d,和sum的地址=%p\n",sum,&sum);
    printf("用指针p来看返回值后sum的值=%d,和sum的地址=%p\n",*p,p);
    return 0;
}

可以把该函数point_fuc()抽象成普通的指针point_fuc。在函数内部运行完函数内的代码并返回一个地址,则point_fuc()就相当于普通指针point_fuc取地址的样子。在上面代码里,可以抽象为普通指针时的样子:

指针函数:

int *point_fuc(int a,int b,int *sum)
{
    *sum = a+b;
    return sum;//返回sum的地址
}
int *p = point_fuc(1,5,&sum);//传給指针p的地址就是函数里return的

抽象成普通指针:

int *point_fuc;
int *p = point_fuc;//将指针point_fuc指向的地址传给指针p

函数指针

函数指针就是函数型指针。通过函数指针指向一个函数,然后就可以通过该指针传递参数给它所指向的函数,并返回值。

#include <stdio.h>
//普通函数one(int c,int d)
int one(int c,int d)
{
    int sum;
    sum = c+d;
    return sum;
}

//普通函数mul(int c,int d)
int mul(int c,int d)
{
    int multiplication;
    multiplication = c*d;
}
int main(void)
{
//函数指针(*fuc_point)(int,int)
    int (*fuc_point)(int,int);//创建函数指针fuc_point
    fuc_point = one;//函数指针fuc_point指向one函数
    int main_sum = fuc_point(15,25);//通过函数指针fuc_point给one函数传值
    printf("main_sum=%d\n",main_sum);
    fuc_point = mul;//将函数指针fuc_point转为指向mul函数
    int multip = fuc_point(15,25);//通过函数指针fuc_point给mul函数传值
    printf("multip=%d\n",multip);
    return 0;
}

利用函数指针来传值给函数并返回值,相对于直接调用函数并返回值。

标签:函数,point,int,sum,C语言,fuc,函数指针,指针
From: https://www.cnblogs.com/denglongjiao/p/16650979.html

相关文章

  • C语言学习笔记
    C语言学习笔记  预处理#include#include指令可以将另一个源文件的全部内容包含进来#include"stdio.h"#include<stdio.h>用尖括号时,C库函数头文件所在......
  • C语言:标准IO
    标准I/OC语言标准I/O有许多专门的函数简化了处理不同I/O的问题。例如,printf()把不同形式的数据转换成与终端相适应的字符串输出。第二,输入和输出都是缓冲的也就是说,一次转......
  • 【C++】智能指针
    这篇讲得很好https://blog.csdn.net/sjp11/article/details/123899141?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166201751616781790748003%2522%252C%2......
  • C语言学生宿舍水电费信息管理系统
    C语言学生宿舍水电费信息管理系统22.学生宿舍水电费信息管理系统功能:(1)记录每个宿舍的名称、编号、用水量、用电量、水电价格、宿舍学生等信息;(2)能够对系统中各宿舍......
  • C语言基础之extern的使用。
    Extern的使用一般是在你想要定义一个可以在多个文件之中被使用的变量。其实很简单只要分为两步:1.在.c文件之中进行定义变量,例如在main.c之中定义uint32_tflag;2.在.h文......
  • C语言:分配内存malloc()和free()
    malloc()函数C可以在程序运行时分配更多的内存,主要通过malloc()函数,该函数接受一个参数:所需的内存字节数。malloc()函数会找到合适的空闲内存块,这样的内存是匿名的。也就......
  • 数组&指针
    分类inta;int*a;int**a;inta[10];int*a[10];int(*a)[10];//一个指向有10个整型数数组的指针int(*a)(int);//一个指向函数的指针,该函数有一......
  • C语言:变长数组(VLA)
    VLAC99新增了变长数组(variable-lengtharrayVLA),允许使用变量表示数组的维度。如下所示:intquarters=4;intregions=5;doublesales[regions][quarters];//......
  • leetcode-11-双指针
    /**<p>给定一个长度为<code>n</code>的整数数组&nbsp;<code>height</code>&nbsp;。有&nbsp;<code>n</code>&nbsp;条垂线,第<code>i</code>条线的两个端点是&nbsp;<cod......
  • 前端也该刷点算法题——双指针解“链表”题也太香了叭!
    双指针解“链表”题也太香了叭!同步双指针1查找链表中倒数第k个节点剑指Offer22.链表中倒数第k个节点思路:假设链表的长度为n,不难得出倒数第k个节点即为整数第n+......