返回值为函数指针的示例

    #include<stdio.h>
     #include <assert.h>
     double GetMin(double *dbData, int iSize)               // 求最小值
     {
         double dbMin;
         int i;
    
         assert(iSize>0);
         dbMin=dbData[0];
         for (i=1; i<iSize; i++){
               if (dbMin>dbData[i]) {
                    dbMin=dbData[i];
               }
         }
         return dbMin;
    }

    double GetMax(double *dbData, int iSize)                 // 求最大值
    {
        double dbMax;
        int i;

        assert(iSize>0);
        dbMax=dbData[0];
        for (i=1; i<iSize; i++){
            if (dbMax< dbData[i]) {
                dbMax=dbData[i];
            }
        }
        return dbMax;
    }

    double GetAverage(double *dbData, int iSize)            // 求平均值
    {
        double dbSum=0;
        int i;
   
        assert(iSize>0);
        for (i=0; i<iSize; i++)
        {
             dbSum+=dbData[i];
        }
        return dbSum/iSize;
    }

    double UnKnown(double *dbData, int iSize)             // 未知算法
    {
        return 0;
    }

    typedef double (*PF)(double *dbData, int iSize);     // 定义函数指针类型
    PF GetOperation(char c)                              // 根据字符得到操作类型,返回函数指针
    {
        switch (c)
        {
          case 'd':
                    return GetMax;
          case 'x':
                    return GetMin;
          case 'p':
                    return GetAverage;
          default:
                    return UnKnown;
          }
    }

    int main(void)
    {
         double dbData[]={3.1415926, 1.4142, -0.5,999, -313, 365};
         int iSize=sizeof(dbData)/sizeof(dbData[0]);
         char c;

         printf("Please input the Operation :\n");
         c=getchar();
         printf("result is %lf\n", GetOperation(c)(dbData,iSize));   // 通过函数指针调用函数
   }


上述程序中前面4个函数分别实现求最大值、最小值、平均值和未知算法,然后实现了GetOperation函数。这个

函数根据字符的返回值实现上面4个函数。它是以函数指针的形式返回的,从后面的main函数的GetOperation(c)

(dbData, iSize)可以看出,通过这个指针可以调用函数。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 非常感谢您向我提出这个问题!根据您的问题描述,我可以理解为您想问如何使用 C 语言函数来返回指针类型的值。 在 C 语言中,函数可以返回各种类型的值,包括指针类型。要返回指针类型的值,您需要将函数声明为返回指针类型,并在函数内部使用 malloc() 或者 calloc() 函数来动态分配内存,以便在函数返回后继续使用这些值。 下面是一个简单的例子,展示了如何定义一个返回指向整数的指针类型的函数: ``` #include <stdio.h> #include <stdlib.h> int* returnPointer(int x) { int* ptr = malloc(sizeof(int)); *ptr = x; return ptr; } int main() { int x = 5; int* ptr = returnPointer(x); printf("The value of x is %d\n", *ptr); free(ptr); // Remember to free the memory! return 0; } ``` 在这个例子中,returnPointer() 函数接受一个整数参数 x,分配一个整数大小的内存空间,将 x 的值存储在该内存位置中,然后返回指向该内存位置的指针。在 main() 函数中,我们调用 returnPointer() 函数,并将返回的指针存储在一个 int 类型的指针变量 ptr 中。最后,我们使用 printf() 函数来打印 ptr 指针所指向的值,并使用 free() 函数释放内存。 需要注意的是,使用 malloc() 或者 calloc() 函数动态分配内存后,必须在不再需要指针使用 free() 函数释放内存,以避免内存泄漏。 希望这个例子可以帮助您理解如何返回指针类型的值。如果您有其他问题,请随向我提出。 ### 回答2: 在C语言中,函数可以返回指针作为返回值。要返回指针,首先需要定义一个指向特定数据类型的指针变量,并在函数内部使用动态内存分配函数(如malloc())为指针分配内存空间。接下来,将需要返回的指针值赋给已分配的内存空间,最后将指针变量作为函数返回值。 下面是一个示例程序,演示了如何在C语言中返回指针作为函数返回值: ```c #include <stdio.h> #include <stdlib.h> int* square(int number) { int* result = (int*)malloc(sizeof(int)); // 使用malloc分配内存空间 *result = number * number; // 将计算结果存储在已分配的内存空间中 return result; // 返回指针变量 } int main() { int number = 5; int* result = square(number); printf("The square of %d is %d\n", number, *result); free(result); // 释放掉函数中动态分配的内存空间 return 0; } ``` 在上面的示例中,函数`square`接受一个整数参数`number`,并返回一个`int`类型的指针函数内部使用`malloc`为指针变量`result`分配了一个`int`类型的内存空间,并将计算结果存储在该内存空间中。`result`指针变量被作为函数返回值返回给调用者。 在`main`函数中,我们调用`square`函数并将返回的指针存储在`result`变量中。然后,我们打印出`number`的平方值。最后,为了避免内存泄漏,我们使用`free`函数释放掉之前在`square`函数中动态分配的内存空间。 通过以上步骤,我们就可以在C语言中实现返回指针函数。 ### 回答3: 在C语言中,函数可以通过返回指针来返回地址值,从而实现返回指针类型的数据。具体实现方法如下: 1. 首先,在函数定义,需要明确指定函数返回值的类型为指针类型,例如`int*`、`float*`、`char*`等。 2. 在函数中,可以通过动态内存分配函数(如`malloc`)或静态内存分配(如定义一个静态指针变量)来分配内存空间,用于存储将要返回的指针数据。 3. 在函数体内,通过分配的内存空间存储需要返回的指针数据。 4. 最后,在函数结束前,使用`return`语句将指针作为返回值返回给调用函数。 以下是一个简单的例子,演示了如何在C语言中返回一个指向整型数组的指针: ```c #include<stdio.h> int* createArray() { static int arr[] = {1, 2, 3, 4, 5}; // 静态数组存储需要返回的数据 return arr; // 返回数组的首地址 } int main() { int* ptr = createArray(); // 调用createArray函数,并将返回的指针存储在ptr中 for (int i = 0; i < 5; i++) { printf("%d ", *(ptr + i)); // 通过指针遍历数组并输出元素 } return 0; } ``` 上述例子中,`createArray()`函数返回了一个指向静态整型数组`arr`的指针。在主函数中,将返回的指针存储在`ptr`变量中,并通过指针遍历数组并输出每个元素的值。 需要注意的是,当返回指针给调用函数后,要确保在调用函数中不要再使用该指针变量所指向的内存区域,避免出现指向已释放内存的悬空指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值