我有一个指向二维2D数组的指针,其尺寸为[N] [M],M均匀。我定义它分配内存如下:
//alocate the memory of indxs pointer containing the indexs of each matrix element
int **indxs;
indxs = (int**) malloc(N*sizeof(int *));
for(i = 0; i<N; i++){
indxs[i] = (int *) malloc(M*sizeof(int));
}
填充后,如果元素indxs[i_N][:M/2]
的前半部分等于元素indxs[i_N][M/2:]
的后半部分,我想比较每一行(i_N)。这个[:M/2]
是Python表示法,我不知道怎么用C表示,有什么建议吗?我在另一篇文章中读到,为了比较两个指针的内容,你必须首先取消引用它们:
int *a = something;
int *b = something;
*a==*b
但是我怎么能这样做呢?
答案 0 :(得分:2)
首先,这不是2D数组而是查找表。
您可以比较查找表中的行:
#include <string.h>
if( memcmp( &indxs[i_N][0],
&indxs[i_N][M/2],
(M/2)*sizeof(indxs[0][0])) == 0 )
{
puts("equal");
}
这很好,因为每个&#34;行&#34;指着一个真实的阵列。数组=在相邻内存中分配了内存单元的内容。
然而,既然你没有2D阵列,你就无法在#34;列&#34;上做到这一点,因为你所有的行分配都是如此在整个堆中被分段。例如,memcmp(indxs[0], indxs[n/2], (n/2)*sizeof(indxs[0][0]))
会崩溃并烧毁。通过使用2D数组来解决这个问题。
答案 1 :(得分:0)
填充后,如果元素
中做到这一点indxs[i_N][:M/2]
的前半部分等于元素indxs[i_N][M/2:]
的后半部分,我想比较每一行(i_N)。这个[:M/2]
是Python表示法,我不知道如何在C
您可以使用memcmp
,在这种情况下可能如下所示:
memcmp( indxs[i_N][0], indxs[i_N][M/2], (M/2)*sizeof( int ) )
注意memcmp
如果相等则返回0。查看memcpy
原型:
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
另请注意,您应该摆脱malloc
:
indxs = malloc(N*sizeof(int *));