繁体   English   中英

动态结构内存之间的指针

[英]pointers between dynamic structs memory

我正在尝试解决我大学里的一个小问题,但是在完成它时遇到了麻烦。

任务是编写定义所有数据结构的代码,并使用指针和malloc在它们之间创建链接。

分配:

有3个街区。 1)是具有2个字段的静态块,第一个字段是整数,第二个字段指向另一个块。

2)一个有2个字段的块。 第一个字段指向第一个块,第二个字段指向第三个块。

3)有2个字段的块。 第一个字段是整数,第二个字段指向第一个块。

我已经开始创建代码并建立链接,但是我不断收到错误,这些错误似乎无法找到他们的逻辑。

struct A;
struct B;
struct C;
typedef struct {
int element;
struct A * pointer3;
}C;

typedef struct {
    struct A * pointer 1;
    struct C * pointer 2;
}B;


typedef struct {
    int element;
    struct B * pointer 0;
 }A;

int main (){
    A a;
    a.pointer0 = (B*)malloc(sizeof(B));

我已经到达了更远的地方,但是我遇到的问题在最后一行。 给我错误警告:来自不兼容指针类型的赋值

问题: struct A什么样的? 答:您的编译器不知道,因为您从未定义过它。

您假设前向声明结构类型,然后正式为结构名称声明typedef别名,其中别名名称 (但不是标签)与要解析的结构标签相同。 不会的 你必须自己做。

从简单开始。 完全摆脱类型别名。 并且也消除所有不必要的前导定义(B和C),它将是什么样?

#include <stdio.h>
#include <stdlib.h>

struct A; // fwd decl

struct C 
{
    int element;
    struct A *pointer3; // uses fwd decl
};

struct B
{
    struct A *pointer1; // uses fwd decl 
    struct C *pointer2; // uses prior def
};

struct A // resolves fwd decl
{
    int element;
    struct B *pointer0; // uses prior def
};

int main() 
{
    struct A a;
    a.pointer0 = malloc(sizeof(struct B));
}

这行得通(在该术语的最乐观定义中)。 如果要使用typedef别名,则可以立即添加它们。 例如,这是标记和别名的所有三个结构。

#include <stdio.h>
#include <stdlib.h>

struct A;
typedef struct A A;

typedef struct C 
{
    int element;
    A *pointer3;
} C;

typedef struct B
{
    A *pointer1;
    C *pointer2;
} B;

struct A 
{
    int element;
    B *pointer0;
};

int main() 
{
    A a;
    a.pointer0 = malloc(sizeof(B));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM