搜尋

首頁  >  問答  >  主體

c++ - “一个指针指向某对象,同时另一个指针指向另外对象的下一地址,两个指针可能相等”是怎么回事?

《C++ Primer》第五版,中文版。p50。
需要注意的是,一个指针指向某对象,同时另一个指针指向另外对象的下一地址,此时也有可能出现这两个指针值相同的情况,即指针相等。

之前在 CSDN 问答上问的:http://ask.csdn.net/questions/256146
“另外对象的下一地址”指的是不是尾后迭代器?
有人提到是相邻的导致相等。是否是下面的代码表达的意思:

#include <iostream>
#include <iterator>

using namespace std;

int a[] = { 1,2 };
int i = 4;

int main()
{

    int *p = end(a);
    if (p == &i) cout << "equ" << endl;

    return 0;
}
高洛峰高洛峰2813 天前921

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 13:50:47

    對於你的題目,描述的意思不知道理解是否有誤。看下面這張圖

    這裡很簡單,是可能相等的。當對象C和對象B是對象,那就相等了。
    借你程式碼一用

    #include <iostream>
    #include <iterator>
    
    using namespace std;
    
    int a[] = { 1,2 };
    
    int main()
    {
        int* p1 = &a[1];        //指针p1指向对象a[1]
        int* p2 = &a[0] + 1;    //指针p2指向对象a[0]的下一个
        if(p1 == p2){
            cout<<"p1("<<p1 <<") = p2("<<p2<<")\n";
        }
        return 0;
    }

    回覆
    0
  • PHPz

    PHPz2017-04-17 13:50:47

    a-b-c-d-....
    p1=b;
    p2=a->下一個;

    p1==p2

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:50:47

    因为内存是连续的,檔指標p遍歷完數組後,其實它已經指向數組後面的一塊記憶體位址。而後面的一塊記憶體位址,剛好是i的位址。 所以他們剛好相等. 我想下面2張圖,會解決你的疑惑:

    自己好好算算記憶體位址, 一個整數4個位元組。 是不是剛好對應上了

    回覆
    0
  • 取消回覆