gpt4 book ai didi

c - 数组比较中的意外行为

转载 作者:行者123 更新时间:2023-11-30 19:07:41 24 4
gpt4 key购买 nike

我正在尝试比较表示矩阵的二维数组中的数据。由于它是一个稀疏矩阵,我创建了二维数组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);

但我猜它给了我指针地址。

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

最佳答案

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

正如 CS Pei 在评论中提到的,您可能需要的是这样的:

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

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

The corresponding argument shall be a pointer to apointer to void. The input item is converted to a pointer value in an implementation-defined manner. If the input item is a value converted earlier during the same program execution, the pointer that results shall compare equal to that value; otherwise the behavior of the %p conversion is undefined.

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

关于c - 数组比较中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46513841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com