簡體   English   中英

如何在 C 中的函數中創建、修改和返回指針數組?

[英]How to create, modify, and return array of pointers in a function in C?

這是我正在嘗試做的一個非常基本的例子(注意這個分段錯誤)

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

typedef struct foo {
    int *bar;
} Foo;

Foo **fooPointers() {
    Foo **test = (Foo**) malloc(sizeof(struct foo) * 3);
    for(int i = 0; i < 3; i++) {
        Foo *curr = *(test + i);
        int *num = &i;
        curr->bar = num;
    }
    return test;
}

int main() {
    fooPointers();
    return 0;
}

目標是創建一個Foo指針數組,為每個元素賦予有意義的值,然后返回指針數組。

有沒有人能夠指出我為什么這不起作用以及我如何完成這項任務的正確方向?

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

typedef struct foo
{
    int *bar;
} Foo;

Foo **fooPointers()
{
    Foo **test = malloc(sizeof(Foo*) * 3);  // should be `sizeof(Foo*)`
    
    static int k[] = {0,1,2};  // new array

    for(int j=0;j<3;j++)
    {
        test[j] = malloc(3*sizeof(Foo));  // No need to cast output of malloc
    }

    for (int i = 0; i < 3; i++)
    {
        Foo *curr = *(test + i);
        //int *num = &i;
        curr->bar = &k[i]; // storing different addresses.
    }
    return test;
}

int main()
{
    Foo **kk;

    kk = fooPointers();

    for(int i=0;i<3;i++)
    {
        printf("%d\n", *(kk[i]->bar));  //printng the values.
    }
    return 0;
}

輸出是:

0
1
2

暫無
暫無

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

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