我正在尝试创建一个创建个性化数组并返回指向它的指针的函数。我有以下代码:

int (*newArray())[COLUNAS] {

    static int thisIsTheNewArray[LINHAS][COLUNAS];
    /* some changes */
    return thisIsTheNewArray;
}


然后,我有:

int (*tabuleiroJogador)[COLUNAS] = newArray();
int (*tabuleiroComputador)[COLUNAS] = newArray();


这里的问题是,如果我更改tabuleiroJogador,我也会更改tabuleiroComputador。我不知道为什么会这样。我认为它与static关键字相关,并且总是返回相同的实例。

数组应该不同。

最佳答案

在这种情况下,static表示数组将在调用newArray()函数之间保持其值。

如果每次调用newArray时都想要数组的另一个副本,则需要动态创建它。完成后,还需要确保已正确释放它。

int* newArray(int lines, int columns)
{
   return malloc(sizeof(int) * lines * columns);
}

int* arr = newArray();
/* later... */
free(arr);


注意:它的语义与原始语义稍有不同,因为它分配了足够的空间,但该数组将在一个维度中建立索引。

关于c - 函数返回的指针与以前相同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28418982/

10-11 18:30