1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言学习笔记---结构体指针

C语言学习笔记---结构体指针

时间:2021-10-03 01:29:43

相关推荐

C语言学习笔记---结构体指针

既然结构体是一种数据类型,那么除了使用变量本身来访问结构体之外,也可以使用指针来访问结构体。下面通过一个简单的例子来演示一下:

struct Date{int year;int month;int day;};struct book{char title[30];char author[30];float value;struct{int year;int month;int day;};};

首先声明一个结构体,这里用结构体来存储书本的信息,包括书本的标题、作者、价格、出版日期。其中出版日期也是一个结构体,这里声明出版日期时使用的是匿名结构声明,没有具体的结构名称。它嵌套在书本结构体中。接下来初始化结构体。

struct book books={"语文","张三",19.8,{,10,1}};struct book *bks;bks = &books;

定义了一个结构体变量books,在定义的时候直接初始化。接着定义了结构体指针,将books的地址赋值给指针。这里要注意一下,结构体的变量名并不是结构体的指针,所以在给指针赋值的时候,必须要使用取值运算符&来获取结构体变量的指针。接下来就可以使用指针来访问结构体的成员了。

printf("%s %s %f %d-%d-%d\r\n",books.title,books.author,books.value,books.year,books.month,books.day);printf("%s %s %f %d-%d-%d\r\n",(*bks).title,(*bks).author,(*bks).value,(*bks).year,(*bks).month,(*bks).day);printf("%s %s %f %d-%d-%d\r\n",bks->title,bks->author,bks->value,bks->year,bks->month,bks->day);

这里使用了三种不同的方式来访问结构体的成员,第一种是直接通过变量加点号的方式来访问具体的成员。虽然日期信息也是一个结构体,但是由于它是匿名的,所以通过变量名加点的方式也可以直接访问到日期成员的信息。如果日期结构体不是匿名的,那么访问日期的时候,就必须使用两次点号才能访问到。

第二种是通过指针来访问具体对象,由于 bks = &books ,那么 *bks = books,因为 & 和 * 是一对互逆运算符,所以可以做如下的替换:

books.title == (*bks).title

这里的 *bks 必须要加圆括号,因为 . 运算符的优先级比 * 运算符优先级高。如果不加圆括号就相当于 *(bks.title),这里一定要记得加括号。

第三种方法是用指针访问结构体的最常用方法,使用->运算符,指向结构体指针的后面加->运算符和变量后面加.运算符的是等效的。

books.title == bks->title

这个和第二种指针的用法也是等效的。

books.title == (*bks).title == bks->title

通过三种不同的方法来访问结构成员,输出结果如下:

通过打印的结果也可以看出,这三种方式访问具体的对象是等效的。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。