通过结构访问数组(使用指针)

时间:2021-04-26 03:33:01

标签: arrays c pointers variables struct

我试图通过一个简单的结构访问一个数组:

int demo()
{

    typedef struct {
        void *things; // 1st element of my array
        int sizeOfThings;
    } Demo;

    typedef struct {
        void *A; // 
        int A;
        int visited
    } element; // my element struct

    Demoarray[4]={"A","B","C","D"); // each element using struct element.

    Demo->things = A;
    return Demo;
}

我可以成功地创建我的阵列和我的演示节点,但是我可以通过我的演示节点在其他函数中访问这个 Demoarray 吗?我该怎么做?我是否必须让我的 Demoarray[4] 成为一个 golble 变量?

1 个答案:

答案 0 :(得分:1)

如果您希望其他函数了解其大小、填充、对齐等并仅在一般情况下使用它,则需要在您的函数之外声明该结构体。

您的数组也需要在堆上而不是堆栈上分配,因为一旦您的函数返回,该指针可能会由于堆栈指针上下移动而丢失。

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

struct Demo {
        void *things; // 1st element of my array
        int sizeOfThings;
} ;

void createthings(struct Demo* d) {
    char* things = malloc(4);
    for(char i = 0; i < 4; ++i){
        things[i] = i+0x41;
    }
    d->things = things;
    d->sizeOfThings = 4;
}

int main() {
    struct Demo d = {0};
    createthings(&d);
    for(char i = 0; i < d.sizeOfThings;++i){
        printf("%c ",*(char*)(d.things+i));
    }
    free(d.things);
    return 0;
}

这将在 main 中创建一个结构体,将它的指针传递给 createthings,createthings 将创建一个分配在堆上的大小为 4 的数组,为其分配值 'A','B','C','D',然后在 main 中将它们打印出来,最后释放内存。