【问题标题】:Access a Array by Struct (with a pointer)通过结构访问数组(使用指针)
【发布时间】:2021-04-26 03:33:01
【问题描述】:

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

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[4] 成为 golble 变量吗?

【问题讨论】:

    标签: arrays c pointers variables struct


    【解决方案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 中打印出来,最后释放内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多