首页 > 解决方案 > 结构变量的解引用指针

问题描述

我试图了解当取消引用指向结构的指针时我们得到什么值。

我的结构是。

    struct car
{
    int a = 5;
    int b = 10;
    int c = 2;
    int d = 14;
    int e = 20;
};

我在 main 函数中的代码是

int main()
{
    car  k1,k2,k3,k4,k5; // declare struct variable
    car* ptr1,*ptr2,*ptr3,*ptr4,*ptr5;// declare pointer to struct variable
    ptr1 = &k1;
    ptr2 = &k2;
    ptr3 = &k3;
    ptr4 = &k4;
    ptr5 = &k5;

    printf("*ptr1=%d *ptr2=%d *ptr3=%d *ptr4=%d *ptr5=%d  \n", *ptr1,*ptr2,*ptr3,*ptr4,*ptr5);
 };

当我将 ptr1 取消引用到 ptr5 时。我得到的值与结构中成员的值相对应(值 a 到 e)。为什么我得到这个值。

标签: c++

解决方案


为了能够打印 struct 你需要重载operator <<. 然后,您的结构应如下所示:

struct car
{
    int a = 5;
    int b = 10;
    int c = 2;
    int d = 14;
    int e = 20;

    friend std::ostream& operator<<(std::ostream& os, const car& c) {
      os << "Struct data:\n";
      os << "------------\n";
      os << "a var: " + std::to_string(c.a) + "\n";
      os << "b var: " + std::to_string(c.b) + "\n";
      os << "c var: " + std::to_string(c.b) + "\n";
      os << "d var: " + std::to_string(c.b) + "\n";
      os << "e var: " + std::to_string(c.b) + "\n";
      return os;
    }
};

然后,如果您要像这样打印取消引用的 ptr:

std::cout << *ptr1 << std::endl;

你会看到这样的输出:

Struct data:
------------
a var: 5
b var: 10
c var: 10
d var: 10
e var: 10

你可以返回你想要的,取决于你。


推荐阅读