我试图通过一个简单的结构访问一个数组:
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 变量?
答案 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 中将它们打印出来,最后释放内存。