我正在尝试创建一个创建个性化数组并返回指向它的指针的函数。我有以下代码:
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/