使用函数指针和结构的示例程序。

时间:2014-02-18 11:16:09

标签: c pointers structure

我创建了一个结构,并希望将值分配给另一个结构的函数指针。我写的示例代码如下所示。请看看我错过了什么。

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

struct PClass{

void *Funt;    

}gpclass;

struct StrFu stringfunc;

struct  StrFu{
    int a ;
    char c;

};

Initialise(){



}

main()
{
    stringfunc.a = 5;
    stringfunc.c = 'd';

    gpclass.Funt = malloc(sizeof(struct StrFu));

    gpclass.Funt = &stringfunc;
    memcpy(gpclass.Funt,&stringfunc,sizeof(struct StrFu));

printf("%u %u",gpclass.Funt->a,gpclass.Funt->c);

}

2 个答案:

答案 0 :(得分:2)

有几个问题:

  1. 函数指针与void *不同,实际上你不能依赖它们之间的转换。
  2. You shouldn't cast the return value of malloc() in C
  3. 您不应该调用malloc(),然后覆盖返回的指针。
  4. 您不需要使用malloc()来存储单个指针,只需使用指针。
  5. 您不应使用memcpy()复制结构,只需使用赋值。
  6. 有两个有效的main()原型:int main(void)int main(int argc, char *argv[]),您也没有。{/ li>

答案 1 :(得分:0)

你的代码中存在很多问题,我尝试纠正它,希望它会有所帮助

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct PClass{

void *Funt;

}gpclass;



struct  StrFu{
    int a ;
    char c;

};

struct StrFu stringfunc;

int main()
{
    stringfunc.a = 5;
    stringfunc.c = 'd';

    gpclass.Funt = malloc(sizeof(struct StrFu));

    gpclass.Funt = &stringfunc;
    memcpy(gpclass.Funt,&stringfunc,sizeof(struct StrFu));

    printf("%d %c",((struct StrFu*)gpclass.Funt)->a,((struct  StrFu*)gpclass.Funt)->c);
    return 0;
}

输出

5 d