【问题标题】:Function pointers in a C structC 结构中的函数指针
【发布时间】:2018-07-05 14:46:22
【问题描述】:

当我尝试在结构中使用 C 函数指针时出现错误(该函数只是从链表中弹出第一个元素并返回该元素):

main.c:在“模拟”函数中:main.c:279:错误:不兼容 从“PROCESS”类型分配给“struct PROCESS *”类型时的类型

我的代码是这样的:

typedef struct PROCESS {
    struct PS_TABLE *tbl_ref;
    int pid;
    int time_in_prev_state;
    int state_ts;
    int static_prio;
    int dynamic_prio;
    int cpu_rem;            
    struct PROCESS *next;
} PROCESS;

typedef void (*Add) (PROCESS *head, PROCESS *new_ps);
typedef PROCESS (*Get) (PROCESS *head);

typedef struct SCHEDULER {
    int quantum;
    sched_t sch_alg;
    Add add_process;
    Get get_next_process;
} SCHEDULER;

PROCESS *fcfs_get_next_proc(PROCESS **head) {     //POP
    PROCESS *tmp = head;
    head = tmp->next;
    tmp->next = NULL;
    return tmp;
}

SCHEDULER *scheduler_obj = malloc(sizeof(SCHEDULER));
scheduler_obj->get_next_process = fcfs_get_next_proc;

PROCESS *RUNNING_PROCESS = NULL;
RUNNING_PROCESS = scheduler->get_next_process(head_proc);

任何帮助将不胜感激!

【问题讨论】:

  • 试试typedef PROCESS* (*Get) (PROCESS *head);
  • 您的函数 PROCESS *fcfs_get_next_proc(PROCESS **head) 返回指针,但您的函数指针原型返回简单的 PROCESS。正如@Ctx 建议的那样,试试他的解决方案。
  • PROCESS *tmp = head; head = tmp->next; 应该是PROCESS *tmp = *head; *head = tmp->next;

标签: c pointers function-pointers


【解决方案1】:

您的next 结构字段是struct PROCESS *,而您的函数返回PROCESS。使它们具有相同的类型,它将起作用。

typedef struct PROCESS *(*Get) (PROCESS *head);
typedef PROCESS *(*Get) (PROCESS *head);

【讨论】:

    猜你喜欢
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多