Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使用指向函数的指针?_C_Function Pointers - Fatal编程技术网

C 如何使用指向函数的指针?

C 如何使用指向函数的指针?,c,function-pointers,C,Function Pointers,例如:这个程序对我不起作用。。 有人能向我解释一下如何正确使用这个程序中的函数指针吗 程序给了我运行时错误 该程序应该是泛型的,并返回任何给定数组的大小 #include<stdio.h> #include<string.h> int ReturnSize_INT(void *a) { a = (int*)a; int count = 0 ; int *p = (int*)a; while(p != NULL) {

例如:这个程序对我不起作用。。 有人能向我解释一下如何正确使用这个程序中的函数指针吗 程序给了我运行时错误

该程序应该是泛型的,并返回任何给定数组的大小

#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;
}
#包括
#包括
int ReturnSize_int(void*a)
{
a=(int*)a;
整数计数=0;
int*p=(int*)a;
while(p!=NULL)
{
计数++;
p++;
}
返回计数;
}
int ReturnSize_char(void*a)
{
a=(char*)a;
整数计数=0;
char*p=(char*)a;
while(p!=NULL)
{
计数++;
p++;
}
返回计数;
}
int ReturnSize_float(void*a)
{
a=(int*)a;
整数计数=0;
浮点数*p=(浮点数*)a;
while(p!=NULL)
{
计数++;
p++;
}
返回计数;
}
int main()
{
int a[]={1,2,5,7,8};
字符b[]={'a','b','c','\0'};
浮点数c[]={2.75,5.25,7.27,4.25};
int(*ReturnSize)(空格*e);
ReturnSize=ReturnSize\u INT;
printf(“%d”,ReturnSize(&a));
返回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;
}

出了什么问题?编译错误?运行时问题?
a=(int*)a-什么?为什么?
while(p!=NULL)
-
p
永远不会
NULL
,除非它溢出。。。你到底在用这段代码做什么?a=(int*)a-假设把a变成int*指针否?如果p永远不能达到null,那么数组0的结尾是什么?给了我运行时错误