c - 如何使用指向函数的指针?

标签 c function-pointers

对于 exp:这个程序对我不起作用.. 任何人都可以向我解释如何正确使用在此程序中使用函数指针的方法 该程序给我运行时错误

程序应该是通用的并返回任何给定数组的大小

#include<stdio.h>
#include<string.h>

int ReturnSize_INT(void *a)
{
    a = (int*)a;
    int count  = 0 ;
    int *p = (int*)a;
    while(p != NULL)
    {
        count++;
        p++;
    }
    return count;
}
int ReturnSize_char(void *a)
{
    a = (char*)a;
    int count  = 0 ;
    char *p = (char*)a;
    while(p != NULL)
    {
        count++;
        p++;
    }
    return count;
}
int ReturnSize_float(void *a)
{
    a = (int*)a;
    int count  = 0 ;
    float *p = (float*)a;
    while(p != NULL)
    {
        count++;
        p++;
    }
    return count;
}

int main()
{

    int a [] = {1,2,5,7,8};
    char b[]={'a','b','c','\0'};
    float c [] = {2.75,5.25,7.27,4.25};
    int (*ReturnSize)(void *e);
    ReturnSize = ReturnSize_INT;
    printf("%d",ReturnSize(&a));

    return 0;
}

最佳答案

a 传递给函数 - 而不是 &a。数组的名称是指向数组开头的指针。

printf("%d",ReturnSize(a));

其次,数据数组中没有终止符。您可以使用标称值,例如 -1。请注意,指针 p 被取消引用 (*p) 以获取 p 指向的值:

int a [] = {1,2,5,7,8,-1};  // in main

int ReturnSize_INT(void *a)
{
    a = (int*)a;
    int count  = 0 ;
    int *p = (int*)a;
    while(*p != -1)
    {
        count++;
        p++;
    }
    return count;
}

关于c - 如何使用指向函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21458211/

相关文章:

c - 是否可以将部分共享二级缓存分配给不同的内核

c++ - 将函数指针插入 QMap (Qt)

calloc 类型转换为指向指针的指针

c - 在一个字节中存储 4 个不同的值

c - 使用二分搜索比较两个文件的一些快速帮助

c++ - 在 linux 中将 "plugins"放在哪里

c - void(*) void 和 int(*) int 在 C 中是什么意思?

c - 包含函数指针的结构,其自身作为 C 中的返回类型

c++ - 传递模板函数。作为一个功能。 ptr 到一个重载的函数。 - 有没有办法编译这段代码?

c - 指向接受指针参数的函数的指针