指针引用结构中的对象

时间:2013-09-14 11:45:34

标签: c++ pointers data-structures

最近我在使用网络编程之后一直在学习C ++,到目前为止,通过cplusplus教程的工作进展顺利。我正在努力解决的一件事是使用引用数据结构中的对象的指针。基本上是:

string mystr;
movies_t amovie;    // create new object amovie from structure movies_t
movies_t* pmovie;   // create a new pointer with type movies_t
pmovie = &amovie;   // reference address of new object into pointer

cout << "Enter movie title: ";
getline(cin, pmovie->title);
cout << "Enter year: ";

getline (cin, mystr);

(stringstream) mystr >> pmovie->year;

cout << endl << "You have entered:" << endl;
cout << pmovie->title;
cout << " (" << pmovie->year << ")" << endl;

可以像以下一样轻松地编写:

string mystr;
movies_t amovie;

cout << "Enter movie title: ";
getline(cin, amovie.title);
cout << "Enter year: ";
getline(cin, mystr);

(stringstream) mystr >> amovie.year;

cout << endl << "You have entered:" << endl;
cout << amovie.title;
cout << " (" << amovie.year << ")" << endl;

我理解它们在数组中的用法,但我很难理解为什么使用指针比从结构中引用值本身更好。

1 个答案:

答案 0 :(得分:2)

  

我理解它们在数组中的用法,但我很难理解为什么使用指针比从结构中引用值本身更好。

他们不是。如果您无法直接引用变量(例如因为要引用的值可能会更改),则使用指针

除此之外,你在这里使用C风格的演员肯定是有创意的。但是不要这样做。 C-style casts are generally not acceptable in C++。在这里使用static_cast

static_cast<stringstream>(mystr) >> amovie.year;

至少使用函数式转换:

stringstream(mystr) >> amovie.year;

...但实际上整行代码(包括mystr的声明)完全没用。只需直接读取值:

cout << "Enter year: ";
cin >> amovie.year;