在处理指针时,在控制台中为*p1和p输出不同值的含义

Ash*_*rse 1 c++

我是C++的新手,通过在线教学自学.今天我正在玩指针和不同的结果,只需要确认一些东西.基本上我知道指针是如何工作的.下面的图片是控制台中的简单代码和输出.

根据我的理解,第二个值2是存储在指针p1指向的元素中的值,因为输出是使用dereference运算符()的p1.

第一个值0x22ff1c,我只需要确认.我假设它是元素存储器中地址的值,因为输出是针对p1的,当然使用引用运算符/符号(&)指向[1]的地址.

我很确定我是从网上研究过的,但只需要有人直接向我确认.

所以我的问题基本上是:0x22ff1c确实是第二个元素的地址,如果没有,那么那个"看起来很滑稽"的值是什么呢?

#include <iostream>

int main()
{
   int a[5] = {1,2,3,4,5};
   int *p1;
   p1 = &a[1];
   std::cout << "Value1: " << p1 << "\n" << "Value2: " << *p1;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Value1: 0x22ff1c
Value2: 2
Run Code Online (Sandbox Code Playgroud)

eml*_*lai 8

是的,你100%正确.它是数组中第二个变量的内存地址.


彻底解释:

  • int *p1声明p1为指向int.
  • 指针存储内存地址.
  • int *p1存储int变量的内存地址.
  • a[1]访问数组中的第二个元素a.
  • &a[1] 给出该元素的内存地址.
  • p1 = &a[1]将内存地址分配给p1.
  • p1 是一个内存地址,所以输出将输出地址.
  • *p1访问存储器地址处的任何内容p1.
  • 有一个int内存地址,所以输出*p1将输出int.