回顾基础知识时,原来的例子里,心想定义一个只想结构体的指针时是否必须加Struct,试一下
原例子:
#include <iostream>
#include <cstring>
using namespace std;
void printBook( struct Books *book );
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
Books Book1; // 定义结构体类型 Books 的变量 Book1
Books Book2; // 定义结构体类型 Books 的变量 Book2
// Book1 详述
strcpy( Book1.title, "C++ 教程");
strcpy( Book1.author, "Runoob");
strcpy( Book1.subject, "编程语言");
Book1.book_id = 12345;
// Book2 详述
strcpy( Book2.title, "CSS 教程");
strcpy( Book2.author, "Runoob");
strcpy( Book2.subject, "前端技术");
Book2.book_id = 12346;
// 通过传 Book1 的地址来输出 Book1 信息
printBook( &Book1 );
// 通过传 Book2 的地址来输出 Book2 信息
printBook( &Book2 );
return 0;
}
// 该函数以结构指针作为参数
void printBook( struct Books *book )
{
cout << "书标题 : " << book->title <<endl;
cout << "书作者 : " << book->author <<endl;
cout << "书类目 : " << book->subject <<endl;
cout << "书 ID : " << book->book_id <<endl;
}
改写一下
Books* mybook;
mybook = &Book1;
printBook( mybook );
以及
Struct Books* mybook;
mybook = &Book1;
printBook( mybook );
效果是一样的,未报错。但有人说用GCC就不行了。
关于->和.的区别:
Book1和Book2是结构体类型,books是结构体指针的话
cout << Book2.title << endl;
cout << (&Book1)->title << endl;
cout << "书作者 : " << book->author << endl;
cout << "书类目 : " << (*book).subject << endl;
都是被允许的。
知乎上的解释,比较详细