比较内容2D指针C

时间:2016-11-04 12:15:02

标签: c arrays pointers

我有一个指向二维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

但是我怎么能这样做呢?

2 个答案:

答案 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 *));