指针函数的调用问题C语言


 程序中若有如下说明和定义语句:
char function(char *); 
main()  { 
       char *s="one", a[5]={0},(*f1)(char *)=function, ch; 
       ...... }
以下选项中对函数function的正确调用语句是______。
A(*f1)(a);  B)*f1(*s);  C)function(&a);  D)ch=*f1(s);

D)ch=*f1(s);

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7517157
  • 这篇博客你也可以参考下:链表的初始化【C语言】
  • 你还可以看下c语言参考手册中的 c语言-函数定义
  • 除此之外, 这篇博客: 编程从C语言开始(一)中的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    1. 首先数组是具有相同类型的若干变量有序的组织以便处理的元素集合!

    说白了数组是一个具有相同类型且有序的构造类型

    1. 数组名充当访问数据成员的首地址
    #include<stdio.h>
    
    int  main() {
    	//首先定义一个数组
    	int name[] = { 1,2,3,4,5 };
    	
    	printf("name:%p\n",name);
    	
    	return 0;
    }
    

    打印结果:

    name:012FF810

    这就说明数组名是数组的唯一标识符 !

    好,根据上述我们得知了数组名可以充当是首地址,那么我们又知道了数组是由若干个相同类型的元素组成的。我们大家把他们结合起来会得到什么呢?


    当name[0]时: 是不是可以这么想我们在name的基础上移动了0个呢?毕竟name本身就是第一个元素啊!以此类推是不是就很好解释了呢?5个元素,但是i<5;

    1. 首先咱要知道[ ]这对框框是啥?_?

    [ ]我们大家通常称为下标运算符

    可是他其实还有其他称呼哦(๑•ᴗ•๑)
    那就是【**基址变址运算符**】
    

    简单点讲就是:i[name]根据name这个基址按照移动i个步长

    在这里插入图片描述

  • 您还可以看一下 王伟老师的C语言入门到精通课程中的 C指针的各种定义含义小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    使用指针函数调用C语言程序的具体步骤如下:

    1.定义指针函数类型,例如:

    typedef void (*FuncPtr)(int* arr, int len); //这里以数组长度为参数举例
    

    2.定义指向函数的指针变量,例如:

    FuncPtr ptr = bubbleSort; //将指针变量指向冒泡排序函数bubbleSort
    

    3.通过指针变量调用相应的函数,例如:

    int arr[] = {10,6,9,3,5,2};
    int len = sizeof(arr)/sizeof(arr[0]);
    ptr(arr, len); //使用指针函数调用冒泡排序函数,对数组进行排序
    

    完整的示例代码如下:

    #include <stdio.h>
    
    typedef void (*FuncPtr)(int* arr, int len); //定义指针函数类型
    
    void bubbleSort(int *arr, int len) //冒泡排序函数
    {
        int i,j,flag;
        for(i=0;i<len;i++) /*外层循环比较的次数*/
        {
            flag=0;
            for(j=len-1;j>i;j--) /*内层循环比较的范围*/
            {
                if(arr[j-1]>arr[j])
                {
                    int temp = arr[j-1];
                    arr[j-1] = arr[j];
                    arr[j] = temp;
                    flag=1;
                }
            }
            if(flag==0)
                return;
        }
    }
    
    int main()
    {
        int arr[] = {10,6,9,3,5,2};
        int len = sizeof(arr)/sizeof(arr[0]);
        FuncPtr ptr = bubbleSort; //定义指向函数的指针变量,指针变量指向冒泡排序函数bubbleSort
        ptr(arr, len); //使用指针函数调用冒泡排序函数,对数组进行排序
    
        int i;
        for(i=0;i<len;i++)
        {
            printf("arr[%d]=%d\n",i,arr[i]); /*输出排序后的数组*/
        }
        return 0;
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^