簡體   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