结构指针不起作用

时间:2017-05-15 09:16:29

标签: c++ loops pointers structure memory-address

使用C ++初学者。

我正在学习数据结构,无法弄清楚如何指向循环内的函数。 e.g。

struct book  
{  
  string author;  
  string title;  
  int publicationYear;  
};

void setBook(book&);  
int main()  
{  
  book bookInfo[3];  
  setBook(bookInfo);  
  return 0;  
}

void setBook(book &bookToSet) 
{  
  for(int i = 0; i < 3; i++)  
  {  
    cout << "Who is the author of the book: ";  
    cin >> bookToSet[i].author;  
    cout << "What is the title of the book: ";  
    cin >> bookToSet[i].title;  
    cout << "In what year was the book published: ";  
    cin >> bookToSet[i].publicationYear;  
  }  
}    

这不起作用,我不知道为什么。

在函数循环中我也尝试编写(bookToSet + 1).author(以引用地址),但它也没有用。

我在指针和地址方面苦苦挣扎。

编辑:
  我试图创建函数(类似于setBooks)来打印标题,作者和publicationYear,但它不会编译。错误在哪里?

void printBooks(book bookToPrint, int cout)
{
  for(int i = 0; i < cout; i++)
  {
    cout << bookToPrint[i].title << " " << bookToPrint[i].author << " " << bookToPrint[i].publicationYear << endl;
  }
}

2 个答案:

答案 0 :(得分:1)

你的函数setBook接受对一本书的引用,但你传给它一个指针。这是因为你创建了一个包含3本书的数组。

您的函数setbook使您看起来像是在使用它来设置一本书(否则您应该将其称为setBooks。它应该如下所示:

struct book  
{  
  string author;  
  string title;  
  int publicationYear;  
};  
void setBook(book&);  
int main()  
{  
  book bookInfo[3];
  for(int i = 0; i < 3; i++)
  {
    setBook(bookInfo[i]);  
  }
  return 0;  
}

void setBook(book &bookToSet) 
{ 
  cout << "Who is the author of the book: ";  
  cin >> bookToSet.author;  
  cout << "What is the title of the book: ";  
  cin >> bookToSet.title;  
  cout << "In what year was the book published: ";  
  cin >> bookToSet.publicationYear;
}    

或者

struct book  
{  
  string author;  
  string title;  
  int publicationYear;  
};  
void setBooks(book *, int);
int main()  
{  
  book bookInfo[3];
  setBooks(bookInfo ,3);  
  return 0;  
}

void setBooks(book *booksToSet, int count) 
{ 
  for (int i = 0; i != count; ++i)
  {
    cout << "Who is the author of the book: ";  
    cin >> booksToSet[i].author;  
    cout << "What is the title of the book: ";  
    cin >> booksToSet[i].title;  
    cout << "In what year was the book published: ";  
    cin >> booksToSet[i].publicationYear;
  }
}    

答案 1 :(得分:0)

您将指针引用混淆了。它们是两个不同的东西,虽然有很多问题可以解决,但它们的工作方式却截然不同。我不会详细解释差异以及何时使用,因为已经有很多关于这个主题的文档(例如,看看this所以问题)。

为了让您开始解决您发布的特定问题,@ Lanting的回答非常好。