gpt4 book ai didi

c - 结构指针错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:03 26 4
gpt4 key购买 nike

int d() {return 0;} int i() {return 7;}

struct a { int(*b)(); }c={d};

typedef struct e{ struct a f; }g;

main() { struct e *h; h->f.b = i; }

当我尝试运行这个程序时出现段错误。任何人都可以证明原因吗?

我也试过

int d() {return 0;} int i() {return 7;}

struct a { int(*b)(); }c={d};

typedef struct e{ struct a f; }g;

main() { struct e *h; h = (g)malloc(sizeof(g)); h->f.b = i; }

现在我收到类似这样的错误

funptrinstrct.c: In function `main': funptrinstrct.c:17: error: conversion to non-scalar type requested

对此的回答也很可观。

最佳答案

对于第一个问题,您创建了一个指针 h 而没有初始化它,然后您立即尝试用 h->f.b 取消引用它。

对于第二个,您应该转换为 g*,而不是 g:

#include <stdio.h>

int d (void) { return 0; }
int i (void) { return 7; }

struct a { int(*b)(void); } c = {d};
typedef struct e { struct a f; } g;

int main (void) {
struct e *h = (g*)malloc (sizeof (g));
h->f.b = i;
printf ("%d\n", h->f.b());
}

那是因为g是一个结构体,而不是指向结构体的指针。上面的代码按预期输出 7

关于c - 结构指针错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3528814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com