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