gpt4 book ai didi

c++ - 指针比较

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:30 25 4
gpt4 key购买 nike

我想比较pp + 1qq + 1 的内存地址和指针值

我想了解以下值的实际含义。我不太清楚发生了什么事。

当我运行代码时:

  • 每次我将地址 p 与另一个指针进行比较时,我都会得到 00EFF680 的答案。
  • 每次将 q 的地址与另一个指针进行比较时,我都会得到 00EFF670 的答案。
  • 当我查看 p 的指针值时,我得到了 15726208 的答案。
  • 当我查看 p + 1 的指针值时,我得到了 15726212 的答案。

  • 当我查看 q

    的指针值时,我得到了 15726192 的答案
  • 然后我得到了 15726200 的答案,然后我查看了 q + 1 的指针值。

代码

#include <iostream>
#include <string>
using namespace std;
int main()
{
int val = 20;
double valD = 20;
int *p = &val;
double *q;
q = &valD;
cout << "Memory Address" << endl;
cout << p == p + 1;
cout << endl;
cout << q == q + 1;
cout << endl;
cout << p == q;
cout << endl;
cout << q == p;
cout << endl;
cout << p == q + 1;
cout << endl;
cout << q == p + 1;
cout << endl;
cout << "Now Compare Pointer Value" << endl;
cout << (unsigned long)(p) << endl;
cout << (unsigned long) (p + 1) << endl;
cout << (unsigned long)(q) << endl;
cout << (unsigned long) (q + 1) << endl;
cout <<"--------" << endl;
return 0;
}

最佳答案

有一些警告和/或错误。

首先是重载运算符 << 的优先级高于比较运算符(在 clang++ 上 -Woverloaded-shift-op-parentheses 是标志)。

第二个是比较不同的指针类型('int *'和'double *')。

对于前者,必须在比较前后加上括号,以使比较优先。对于后者,应将指针转换为允许进行安全比较的类型(例如 size_t)。

例如在第 20 行,下面的代码会很好地工作。

cout << ((size_t) p == (size_t) (q + 1));

至于第 25-28 行,这是标准的指针算法。看解释here .

关于c++ - 指针比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39440034/

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