网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 186|回复: 0
打印 上一主题 下一主题

【C语言】结构体指针成员访问

[复制链接]

651

主题

658

帖子

2960

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2960
跳转到指定楼层
楼主
发表于 2024-6-17 21:32:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 wander 于 2024-6-17 21:39 编辑

指向结构体的指针该如何通过指针访问其成员呢?

通过结构体指针可以获取结构体成员,一般形式为:(*pointer).memberName
或者:
pointer->memberName
第一种写法中,.的优先级高于*(*pointer)两边的括号不能少。如果去掉括号写作*pointer.memberName,那么就等效于*(pointer.memberName),这样意义就完全不对了。

第二种写法中,->是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针直接取得结构体成员;这也是->在C语言中的唯一用途。

上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。

【示例】结构体指针的使用。
  • #include <stdio.h>
  • int main(){
  •     struct{
  •         char *name;  //姓名
  •         int num;  //学号
  •         int age;  //年龄
  •         char group;  //所在小组
  •         float score;  //成绩
  •     } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;
  •     //读取结构体成员的值
  •     printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", (*pstu).name, (*pstu).num, (*pstu).age, (*pstu).group, (*pstu).score);
  •     printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!\n", pstu->name, pstu->num, pstu->age, pstu->group, pstu->score);
  •     return 0;
  • }


运行结果:
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!
Tom的学号是12,年龄是18,在A组,今年的成绩是136.5!

【示例】结构体数组指针的使用。
  • #include <stdio.h>
  • struct stu{
  •     char *name;  //姓名
  •     int num;  //学号
  •     int age;  //年龄
  •     char group;  //所在小组
  •     float score;  //成绩
  • }stus[] = {
  •     {"Zhou ping", 5, 18, 'C', 145.0},
  •     {"Zhang ping", 4, 19, 'A', 130.5},
  •     {"Liu fang", 1, 18, 'A', 148.5},
  •     {"Cheng ling", 2, 17, 'F', 139.0},
  •     {"Wang ming", 3, 17, 'B', 144.5}
  • }, *ps;
  • int main(){
  •     //求数组长度
  •     int len = sizeof(stus) / sizeof(struct stu);
  •     printf("Name\t\tNum\tAge\tGroup\tScore\t\n");
  •     for(ps=stus; ps<stus+len; ps++){
  •         printf("%s\t%d\t%d\t%c\t%.1f\n", ps->name, ps->num, ps->age, ps->group, ps->score);
  •     }
  •     return 0;
  • }


运行结果:
Name           Num       Age     Group   Score
Zhou ping      5           18        C       145.0
Zhang ping    4           19        A       130.5
Liu fang        1           18        A       148.5
Cheng ling     2          17        F       139.0
Wang ming    3          17        B       144.5

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-9-20 05:59 , Processed in 0.034797 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表