C 如何将(long*)转换为二维long数组
我在C中有以下代码,其中C 如何将(long*)转换为二维long数组,c,arrays,pointers,C,Arrays,Pointers,我在C中有以下代码,其中G是一个全局变量: long *G; int function(long matrix[35][10]){ G=&matrix[0][0]; } 一旦我将矩阵[0][0]的地址存储在G中,我就可以访问矩阵的所有元素,如下所示: G[0]=... G[1]=... . . . G[349]=... 我希望通过使用另一个函数内部的两个方括号,能够访问所有这些元素,就像使用matrix一样。我怎么能做到呢?也就是说,我如何告诉编译器这个二维数组中第二维的偏
G
是一个全局变量:
long *G;
int function(long matrix[35][10]){
G=&matrix[0][0];
}
一旦我将矩阵[0][0]
的地址存储在G
中,我就可以访问矩阵的所有元素,如下所示:
G[0]=...
G[1]=...
.
.
.
G[349]=...
我希望通过使用另一个函数内部的两个方括号,能够访问所有这些元素,就像使用matrix
一样。我怎么能做到呢?也就是说,我如何告诉编译器这个二维数组中第二维的偏移量是10
我确实看到了这个答案:
,但我不确定用户是否问了完全相同的问题。如果我错了,请纠正我将G作为指针
long **G;
但是你仍然不能通过G[i]直接访问,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];
array
是指向10个long
s数组的指针。它是相同的question@Dabo所以,如果我按照这个问题的答案,一个64位的值基本上会被分配给我的全局变量,对吗?只要确保long*G
只是一个指针,如果您机器上的sizeof
指针是8
,那么是的,它将有64位。为了确保数组只分配了64位,对吗?它前面有一个3,这让我觉得三个long是分配的,这取决于系统,sizeof(long*)
将分配给array
。或者因为他想这样使用G
本身,而只是将G
声明为long(*G)[10]编码>并直接向其分配矩阵
,如G=matrix代码>。这不起作用。指针和数组不一样。读取G[34]将从数组的数据缓冲区中获取一个元素,并尝试取消对该元素的引用,这显然会导致访问冲突
long (*array)[10] = (long(*)[10])G;