我正在尝试比较代表矩阵的2D数组中的数据。 由于它是一个稀疏矩阵,我创建了二维数组compactMatrix,其中包含值矩阵入口不为空的行和列。
我正在使用此代码进行比较:
if(compactMatrix[0][i] == compactMatrix[1][k] &&
compactMatrix[1][i] == compactMatrix[0][k]){
Do stuff...
}
i
和k
是我目前在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
以及如何正确地修复它。
答案 0 :(得分:1)
printf
用于输出不需要地址的值。此外,当您尝试以整数格式打印地址时,其行为是未定义的。该标准要求您使用%p
打印地址。
正如CS Pei在评论中提到的,你需要的是:
printf ("%i %i",j,l);// you can use %d and %i interchangeably.
标准本身有一些关于%p
的额外说明:
相应的参数应该是指向void的指针。 输入项将转换为指针值 实现定义的方式。如果输入项是转换的值 在同一程序执行的早期,结果的指针 应比较等于该值;否则%p的行为 转换未定义。
因此,如果您使用p说明符,请不要忘记将参数转换为void*