数组比较中出现意外行为

时间:2017-10-01 15:24:02

标签: c arrays matrix multidimensional-array

我正在尝试比较代表矩阵的2D数组中的数据。 由于它是一个稀疏矩阵,我创建了二维数组compactMatrix,其中包含值矩阵入口不为空的行和列。

我正在使用此代码进行比较:

    if(compactMatrix[0][i] == compactMatrix[1][k] &&
       compactMatrix[1][i] == compactMatrix[0][k]){

        Do stuff...
    }

ik是我目前在for循环中查看的索引。 您知道,我调试了compactMatrix[0][i]compactMatrix[1][k]以及compactMatrix[1][i]compactMatrix[0][k]的值确实相等。

尝试使用

打印值
    j = compactMatrix[0][i];
    l = compactMatrix[1][i];
    printf("%i %i", &j, &l);

但它给了我指针地址,我想。

所以,我想知道为什么它会在if子句中返回false以及如何正确地修复它。

1 个答案:

答案 0 :(得分:1)

printf用于输出不需要地址的值。此外,当您尝试以整数格式打印地址时,其行为是未定义的。该标准要求您使用%p打印地址。

正如CS Pei在评论中提到的,你需要的是:

printf ("%i %i",j,l);// you can use %d and %i interchangeably.

标准本身有一些关于%p的额外说明:

  

相应的参数应该是指向void的指针。   输入项将转换为指针值   实现定义的方式。如果输入项是转换的值   在同一程序执行的早期,结果的指针   应比较等于该值;否则%p的行为   转换未定义。

因此,如果您使用p说明符,请不要忘记将参数转换为void*