Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Why do these two C++ statements give two different locations in memory

With the following code, two different addresses are printed out. Can anyone explain why? I’m not the most proficient with pointers but I presumed that they would give the same address.

#include <iostream>

int main() {

    float (*arrayName)[2][4][4];

    auto address1 = (**arrayName)[1]; // 0x10
    auto address2 = (*arrayName)[1][0]; // 0x40
    std::cout << "Address1: " << address1 << std::endl;
    std::cout << "Address2: " << address2 << std::endl;
}

0x40 is the address I’m looking for. Just don’t understand why I get two different answers.

I was expecting both to give me an answer of 0x40 however one doesn’t. Tried this code on an online C++ compiler and both gave me the address of 0x10. However on my development RHEL7 vm, I get 0x10 and the expected 0x40 address.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

As for what’s really going on, please learn that for any pointer or array p and index i, the expression p[i] is exactly equal to *(p + i).

From that it follows that p[0] must be equal to *(p + 0) which of course is equal to *(p) which is the same as *p.

And from that we can learn that *arrayName is the same as arrayName[0], from which follows that **arrayName is arrayName[0][0].

With this information it’s easy to see that (*arrayName)[1][0] is different from (**arrayName)[1]:

  • (*arrayName)[1][0] is the same as arrayName[0][1][0].

  • (**arrayName)[1] is the same as arrayName[0][0][1].

But remember, because arrayName isn’t assigned or initialized with a specific pointer, it can’t be dereferenced.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading