在函数-C中将一维数组视为二维数组

在函数-C中将一维数组视为二维数组,c,arrays,pointers,C,Arrays,Pointers,如果标题不完全正确,请告诉我 首先在main中使用malloc初始化指向数组的指针,然后将其传递给一个函数,该函数接收指向int的指针,如下所示: void readfile(int**); int main(void) { int (*obsF) = malloc(sizeof(int)*16); readfile(&obsF); free(obsF); } void readfile(int **obsF) { //I can do this without er

如果标题不完全正确,请告诉我

首先在main中使用malloc初始化指向数组的指针,然后将其传递给一个函数,该函数接收指向int的指针,如下所示:

void readfile(int**);

int main(void)
{
  int (*obsF) = malloc(sizeof(int)*16);
  readfile(&obsF);
  free(obsF);
}

void readfile(int **obsF)
{
  //I can do this without errors:
  obsF[0][1] = 1;

}

我不明白为什么我必须将其视为2D数组,因为如果我执行
obsF[1]=1
操作,我会得到一个错误。有人能解释一下为什么会发生这种情况吗?

将函数签名从
void readfile(int**)
更改为
void readfile(int*)
并从
void readfile(int**obsF)
更改为
void readfile(int*obsF)


当您将函数签名设置为int**时,编译器将其视为指向指针的指针,因此它被视为2D数组,而不是1D数组。

因为
obfF[1]
属于
int*
@GeorgesupportsGoFundMonica您能再详细说明一下吗?
readfile(int**obsF)
意味着
obsF[i]
属于
int*
类型,因此您当然不应该为其分配任何
int
值。为什么在
obsF
中使用
int**
而不是
int*
?@kaylum现在我意识到这实际上是一个错误。正如朱利安·陈(Julian Chan)告诉我的那样,我应该通过一个int*。这是我一直在做的一项大学工作的最后一个项目的一部分,我真的很紧张,因为我的代码不起作用,突然间,这样做了。现在我正在修改它并意识到错误,我不理解这种行为。^^这也意味着您可以使用
(*obsF)[1]
。然而,在这种情况下似乎没有理由使用双指针。