如何使用指针函数?

时间:2014-01-30 13:44:36

标签: c function-pointers

for 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;
}

1 个答案:

答案 0 :(得分:2)

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

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

其次,数据阵列中没有终结符。例如,您可以使用标称值,例如-1。请注意,指针p是derefenced(*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;
}