如何将(long *)转换为long的2维数组

时间:2014-03-17 06:58:43

标签: c arrays pointers

我在C中有以下代码,其中G是一个全局变量:

long *G;

int function(long matrix[35][10]){
    G=&matrix[0][0];
}

matrix[0][0]的地址存储在G后,我可以访问matrix的所有元素,如下所示:

G[0]=...
G[1]=...
.
.
.
G[349]=...

我希望能够通过使用另一个函数内部的两个方括号来访问所有这些与matrix类似的元素。我怎么能这样做?也就是说,如何告诉编译器这个二维数组中第二维的偏移量是10?


我确实看过这个答案: Create a pointer to two-dimensional array ,但我不确定用户是否问过完全相同的事情。如果我错了,请纠正我

2 个答案:

答案 0 :(得分:2)

long (*array)[10] = (long(*)[10])G;  

array是一个指向10 long s。

数组的指针

答案 1 :(得分:-2)

让G指针指向。

long **G;

你仍然无法通过G [i]直接访问我从0到349。

但是,你可以做的一件容易的事就是将一个数字转换为2个下标。

例如:

G[349] is actually G[34][9].

因此公式是 如果你想要

G[k]

然后像这样访问它:

G[k/10][k%10];

这是针对这种特殊情况。

一般情况下, 将1个下标转换为2个下标的公式为:

G[k] is equivalent to G[k/NO_OF_COLUMNS][k%NO_OF_COLUMNS];