C语言 如何创建初始化指针数组

rsaldnfx  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(196)

我有一个结构:

struct Path{
    int8_t maxtopy;
};

我想创建一个指向Path结构的指针数组,我试过类似的方法:
第一次
这是行不通的。第一个路径的值被正确赋值。但当for循环开始时,我得到了分段错误。我已经发现,当我创建指针数组时,只有第一个指针会被赋值给某个结构。所以我不能例如paths[1]->maxtopy = -1;,因为paths[1]不指向任何现有的结构。
我曾经试过这样的办法:

for(int i = 1; i < NUMBER_OF_PATHS; i++){
        static struct Path a;
        paths[i] = &a;
        paths[i]->maxtopy = i;
}

因为它只初始化a一次,所以paths数组中的每个指针都指向同一个结构。
我的问题是:如何创建指向初始化结构的指针数组?

3xiyfsfu

3xiyfsfu1#

你已经创建了一个指针数组,但是指针需要指向某个东西。你可以用malloc动态地分配每个指针。

struct Path{
    int8_t maxtopy;
};

int main(void) {
    struct Path *paths[NUMBER_OF_PATHS]; 

    for (size_t i = 0; i < NUMBER_OF_PATHS; i++) {
        paths[i] = malloc(sizeof(struct Path));
        paths[i]->maxtopy = i;
    }

    return 0;
}

当然,如果您的数组是在main中声明的,并且大小不太大,您可能只需要编写以下代码。

int main(void) {
    struct Path paths[NUMBER_OF_PATHS]; 

    for (size_t i = 0; i < NUMBER_OF_PATHS; i++) {
        paths[i].maxtopy = i;
    }

    return 0;
}
waxmsbnn

waxmsbnn2#

const int NUMBER_OF_PATHS = 10;

struct Path {
    int8_t maxtopy;
};

void init_paths(struct Path** paths) {
    for (int i = 0; i < NUMBER_OF_PATHS; i++) {
        paths[i] = (Path*)malloc(sizeof(Path));
        paths[i]->maxtopy = i;
    }
}

int main() {
    struct Path* paths[NUMBER_OF_PATHS];

    init_paths(paths);

    for (auto i : paths) {
        printf("%d\n", i->maxtopy);
    }
}

相关问题