微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++程序打印出地址而不是值

如何解决C ++程序打印出地址而不是值

我有一个程序,该程序通过结构接收信息并将其放入向量中,而我试图打印出该信息,但获取地址。该结构应正确保存值,因此我认为这是我的指针还是打印出来的方式。

#include <iostream>
#include <cstring>
#include<vector>

using namespace std;

struct student
{
  char* fName;
  char* lName;
  int id;
  float gpa;
};

void add(vector<student*>*);

int main() 
{
  vector <student*>* list = new vector<student*>();


    if (strcmp(cmd,"ADD") == 0)
    {
      add(list);  
    }
    else if (strcmp(cmd,"PRINT") == 0)
    {
      for(vector<student*>::iterator i = list->begin(); i != list->end(); i++)
      {
        cout << *i;
      }
      cout << "print" << endl;
    }
}
  void add(vector<student*>* paramlist)
  {
    student* s = new student();
    s->fName = new char[25];
    s->lName = new char[25];

    cout << "Enter first name" << endl;
    cin >> s->fName;

    cout << "Enter last name" << endl;
    cin >> s->lName;

    cout << "Enter id number" << endl;
    cin >> s->id;

    cout << "Enter GPA" << endl;
    cin >> s->gpa;

    paramlist->push_back(s);
  }

或者可能与我遍历向量的方式有关。

解决方法

您需要为结构添加操作符重载,以定义结构在打印时应如何显示。您还需要取消引用指针以及迭代器。

// Define how the struct should look when printed.
// This function makes it appear like:
// Name: John Smith,ID: 1235,GPA: 4.0
std::ostream &operator<<(std::ostream &os,const student &val) {
  os
    << "Name: " << val.fname << " " << val.lname
    << ",ID: " << val.id
    << ",GPA: " << val.gpa
    << endl;

  return os;
}

然后再...

for(vector<student*>::iterator i = list->begin(); i != list->end(); i++)
{
  // Dereference twice,once for the iterator,and again for the pointer.
  cout << **i << endl;
}
,

您必须两次取消引用**i。 使用*i,您可以获得vector 元素的地址,即student*。 您得到student,您需要其他*

您可以使用for (auto i: list)来简化生活。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。