簡體   English   中英

我應該如何在下面的代碼中使用 C 中的結構指針數組?

[英]How should I use an array of pointers of structs in C in my code below?

我有一個更復雜的項目,我(盡我所能)將我的問題簡化為您可以在此處看到的代碼。

我懷疑問題出在文件 Bc 中的函數 create_B() 和/或當我從文件 Ac 調用此函數時。 或者也許我的 x 和 y 也應該是指針? 如您所知,我只是在學習 C 編程,任何幫助/解釋將不勝感激。

乙:

#ifndef B_H
#define B_H

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

typedef struct B B;
typedef B *B_ptr;

struct B
{
    int x;
    int y;
};

B_ptr create_B(int x, int y);

#endif

公元前:

#include "B.h"

B_ptr create_B(int x, int y) {
    B_ptr b = (B_ptr)malloc(sizeof(B));
    b->x;
    b->y;
    return b;
}

啊:

#ifndef A_H
#define A_H

#include "B.h"

typedef struct A A;
typedef A *A_ptr;

struct A
{
    B_ptr *list_of_10_pointers;
};

A_ptr create_A();

#endif

交流:

#include "A.h"

A_ptr create_A()
{
    A_ptr a = (A_ptr)malloc(sizeof(A));
    if (!a)
        return NULL;

    B_ptr *list = (B_ptr *)malloc(10 * sizeof(B_ptr));
    if (!list)
        return NULL;
    a->list_of_10_pointers = list;

    for (size_t i = 0; i < 10; i++)
    {
        // list[i] = (B_ptr)malloc(sizeof(B));
        list[i] = create_B(i+1, i+2);
    }

    return a;
}

主要.c:

#include <stdio.h>

#include "A.h"

int main(int argc, char **argv)
{
    A_ptr a = create_A();

    for (size_t i = 0; i < 10; i++)
    {
        printf("x=%d\n", a->list_of_10_pointers[i]->x);
        printf("y=%d\n", a->list_of_10_pointers[i]->y);
    }
    return 0;
}

編譯: gcc Main.c Ac Bc -o out

輸出:

x=0
y=0
x=0
y=0
.
.
.
x=0
y=0

編譯給出這些警告:

$ gcc Main.c A.c B.c -o out
B.c:5:8: warning: expression result unused [-Wunused-value]
    b->x;
    ~  ^
B.c:6:8: warning: expression result unused [-Wunused-value]
    b->y;
    ~  ^
2 warnings generated.

這幾乎直接導致將Bc更改為:

#include "B.h"

B_ptr create_B(int x, int y) {
    B_ptr b = (B_ptr)malloc(sizeof(B));
    b->x = x;
    b->y = y;
    return b;
}

然后輸出變為:

$ ./out
x=1
y=2
x=2
y=3
x=3
y=4
x=4
y=5
x=5
y=6
x=6
y=7
x=7
y=8
x=8
y=9
x=9
y=10
x=10
y=11

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM