2D数组指针语法-C

2D数组指针语法-C,c,arrays,pointers,C,Arrays,Pointers,我是C语言的新手,我们的教授给我们布置了一个性能任务,我们必须操作一些2d数组。我试图找出如何在两个数组之间正确移动值。我相信使用*(数组*I+j)可能有助于加快速度,但我无法将其编译。我知道数组[I][j]通常是可以接受的,但我需要尽快实现它。问题线看起来像 out[x] = *( *(in+i) + j); 我得到的错误是“当从int类型分配给int[10000]类型时,类型不兼容。 我应该为out和in提供指针吗?我不被允许更改正在使用的实现 define N 10000 /* The

我是C语言的新手,我们的教授给我们布置了一个性能任务,我们必须操作一些2d数组。我试图找出如何在两个数组之间正确移动值。我相信使用*(数组*I+j)可能有助于加快速度,但我无法将其编译。我知道数组[I][j]通常是可以接受的,但我需要尽快实现它。问题线看起来像

out[x] = *( *(in+i) + j);
我得到的错误是“当从int类型分配给int[10000]类型时,类型不兼容。 我应该为out和in提供指针吗?我不被允许更改正在使用的实现

define N 10000

/* The input matrix */

long in[N][N];

/* The output matrix */
long out[N][N];
我确信答案是显而易见的,但我的任何更改都不起作用。我只想更改out[x]或out+x处的值。

试试这个

out[column][row] = *( *(in+i) + j);

你忘了为你所关联的数组的第二个分区编制索引。

out
是一个2D数组,你所说的
out[x]
是什么意思?
a[x]
*(a+x)
是完全等效的,使用其中一种或另一种都不会带来性能提升。据我所知,2d数组的内存是线性存储的,因此使用*(out+x)将是一种可以接受的通过数组递增的方式?我一直在研究一些算法,有些算法似乎使用这种格式,例如
*(out+x)
out[x] 
完全相同,这是同一事物的替代语法。它们都指定了一个数组[100](而不是
)。在您链接到的页面中,
a
是一个一维数组。您可以通过执行
((长*)&In)
,然后编写
((长*)&In)[i*N+j]来假装您的数组是一维数组
。但是,您只是使代码更难阅读,而没有性能提升。性能!=混淆。@JonathanLeffler,没错,但我严格回答了如何设置数组的问题。