网络

教育改变生活

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

【C语言】什么是结构体指针

[复制链接]

686

主题

693

帖子

3101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3101
跳转到指定楼层
楼主
发表于 2024-6-17 21:30:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
当一个指针变量指向结构体时,我们就称它为结构体指针。C语言结构体指针的定义形式一般为:
struct 结构体名 *变量名;
下面是一个定义结构体指针的实例:
  • //结构体
  • struct stu{
  •     char *name;  //姓名
  •     int num;  //学号
  •     int age;  //年龄
  •     char group;  //所在小组
  •     float score;  //成绩
  • } stu1 = { "Tom", 12, 18, 'A', 136.5 };
  • //结构体指针
  • struct stu *pstu = &stu1;


也可以在定义结构体的同时定义结构体指针:
  • struct stu{
  •     char *name;  //姓名
  •     int num;  //学号
  •     int age;  //年龄
  •     char group;  //所在小组
  •     float score;  //成绩
  • } stu1 = { "Tom", 12, 18, 'A', 136.5 }, *pstu = &stu1;


注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必须在前面加&,所以给 pstu 赋值只能写作:
struct stu *pstu = &stu1;
而不能写作:
struct stu *pstu = stu1;
还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的,不可能去取一个结构体名的地址,也不能将它赋值给其他变量:
struct stu *pstu = &stu;
struct stu *pstu = stu;


回复

使用道具 举报

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

本版积分规则

WEB前端

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

GMT+8, 2024-12-23 03:46 , Processed in 0.032219 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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