我试图将两个字符相互比较,但将它们视为整数。这些是链表中的结构值。我打印出temp->next->variable
和temp->variable
并确认if语句应该成立ex: 3 > 2
。但我认为它可能不起作用,因为它们是char
。
它们是char
值的事实会对比较产生影响吗?
if(temp->next->variable > temp->variable)
{
....
}
答案 0 :(得分:0)
根据C标准(6.5.8关系运营商)
3如果两个操作数都有算术类型,则通常算术 转换已完成。
通常的算术转换包括整数提升,特别是意味着char
类型的对象转换为int
类型的对象
考虑到char
类型的行为类型为unsigned char
或signed char
。因此,如果设置了char
类型的对象的符号位,则可以得到不同的比较结果。
答案 1 :(得分:0)
字符是8位长度的整数,所以如果你总是将字符视为整数,那么这将具有你想要的确切行为。要小心,因为有些编译器允许char默认为unsigned,有些是签名,这可能会产生看似随意的问题。 (如果两个数字具有相同的最高位,则不会有所不同,否则结果将与您的预期相反,如果签名也与您期望的相反。)
如果您将它们视为字符,那么这将为您提供字典比较,这是基于该字符的内部整数表示。最好检查一下你的语言环境是什么 - 你的程序是使用ASCII或Unicode 8位的查找表还是其他任何东西。
如果你仍然遇到隐藏的问题,常见的错误是有许多分层指针,即使整个过程中使用了箭头[ - >],你仍然可能需要应用去引用[*],否则你我会暗中测试他们在记忆中的相对位置。