数组的名字不就是它的第一个元素的地址吗?为什么这段代码给出了两个不同的地址?

问题描述 投票:0回答:1

代码:

    antarctica_years_end s01, s02, s03;
    s01.year = 1998;

    antarctica_years_end* pa = &s02;
    pa->year = 1999;

    antarctica_years_end trio[3]; // array of 3 structures
    trio[0].year = 2003;

    antarctica_years_end* arp[3] = { &s01, &s02, &s03 };
    

    std::cout << arp << " " << &s01 << std::endl;

线路:

std::cout << arp << " " << &s01 << std::endl;

输出:

0000007AFB0FFC68 0000007AFB0FFBB4

arp 和 &s01 不应该是一样的吗?根据到目前为止我所学到的知识,我知道数组的名称是其第一个元素的地址。 arp 是指针数组的数组名,&s01 是其第一个元素的地址。

我尝试将线路更改为:

std::cout << arp[0] << " " << &s01 << std::endl;

它打印出相同的地址。

0000008517DBF8E4 0000008517DBF8E4

如果这个问题很愚蠢,我很抱歉,我刚刚开始以编程方式学习 C++,并且对这种语言仍然很陌生。

c++ arrays pointers
1个回答
0
投票

希望对你有帮助

s1:          [1998]
             ↑
             &s1 = 0000007AFB0FFBB4
             ↓
arp: [0000007AFB0FFBB4][...]
     ↑    
     &arp = 0000007AFB0FFC68 

© www.soinside.com 2019 - 2024. All rights reserved.