我有一个指针指向二维整数数组,其维数为[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)进行比较。这是Python符号,我不知道如何用C来表示,有什么建议吗?。我在另一篇文章中读到,要比较两个指针的内容,必须先取消对它们的引用:int *a = something;
int *b = something;
*a==*b
但在我的情况下怎么能做到呢?
最佳答案
首先,这不是一个二维数组,而是一个查找表。
可以这样比较查找表中的行:
#include <string.h>
if( memcmp( &indxs[i_N][0],
&indxs[i_N][M/2],
(M/2)*sizeof(indxs[0][0])) == 0 )
{
puts("equal");
}
这很好,因为每个“行”都指向一个真正的数组。数组=在相邻内存中分配内存单元的东西。
但是,由于没有2D数组,因此无法在“columns”上执行此操作,因为所有行分配都在堆中分段。例如,
memcmp(indxs[0], indxs[n/2], (n/2)*sizeof(indxs[0][0]))
会崩溃并烧掉。用二维数组来解决这个问题。