首页 > 后端开发 > C++ > 如何在 C 中安全地比较指针的相等性和排序?

如何在 C 中安全地比较指针的相等性和排序?

Susan Sarandon
发布: 2024-12-03 09:08:11
原创
274 人浏览过

How Do I Safely Compare Pointers for Equality and Ordering in C  ?

比较指针是否相等:C 标准演练

在 C 中,比较指针是否相等可以很简单,但需要遵守符合语言标准中概述的特定规则。

相等运算符 (==, !=)

对于相同类型的指针,使用 == 或 != 进行相等比较会产生直观的结果。如果两个指针都为空、都指向同一函数或都指向同一地址,则它们相等。

关系运算符 (

相同类型的指针也可以使用关系运算符进行比较。如果它们指向相同的对象或函数,它们将按预期进行比较:p=q 产生 true,而 pq 产生 false。

但是,如果指针指向不同的对象或函数,或者如果其中之一为空,则关系比较的结果是未指定的。这意味着它们的行为取决于实现。

规则的例外

数组元素:如果指针指向同一数组的元素,指向索引较高的对象的指针比较较大。

Union成员: 如果指针指向同一个联合体的成员,则转换为 void* 后比较相等。

其他类型的指针:

  • 指向非静态成员函数的指针:排序结果未指定。
  • 指向非静态数据成员的指针具有不同访问控制的同一对象:排序结果未指定。
  • 指向同一联合对象的非静态数据成员的指针:转换为 void* 后比较相等。

注意事项

  • 指向不同全局变量的指针不能使用关系比较运算符。
  • 变量范围结束后,无法比较指向局部变量的指针。

奖励:标准库助手

标准库提供了模板函数 std::greater、std::less、std::greater_equal 和 std::less_equal,其中可以用来对任何类型的指针进行排序,即使内置运算符不能。

以上是如何在 C 中安全地比较指针的相等性和排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板