我有一个指针指向二维整数数组,其维数为[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]))会崩溃并烧掉。用二维数组来解决这个问题。

10-08 03:53