- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++语言结构体和指针
指针也可以指向一个结构体,定义的形式一般为:
struct 结构体名 *变量名;
下面是一个定义结构体指针的实例:
structstu{ //
structstu{ //定义结构体和结构体名字char *name; //姓名
intnum; //学号
int age; //年龄
char group; //所在小组float score; //成绩
}stu1 = { Tom, 12, 18, A, 136.5 }; //用已经定义的结构体类型定义结构体变量
//结构体指针
structstu *pstu = stu1; //用已经定义的结构体定义结构体指针变量
上述代码已经测试。
注意:定义已经命名的结构体指针的时候必须用已命名结构体类型定义的结构体变量的地址进行初始化。
注意:定义已经命名的结构体指针的时候必须用已命名结构体类型定义的结构体变量的地址进行初始化。
也可以在定义结构体的同时定义结构体指针:
structstu{ //
structstu{ //定义结构体和结构体名字char *name; //姓名
intnum; //学号
int age; //年龄
char group; //所在小组float score; //成绩
}stu1 = { Tom, 12, 18, A, 136.5 },*pstu = stu1; //用已经定义的结构体类型定义结构体变量
上述代码已经测试
注意,结构体变量名和数组名不同,数组名在表达式中会被转换为数组指针,而结构体变量名不会,无论在任何表达式中它表示的都是整个集合本身,要想取得结构体变量的地址,必
须在前面加 ,所以给 pstu 赋值只能写作:
struct stu *pstu = stu1;
struct stu *pstu = stu1;
而不能写作:
struct stu *pstu = stu1;
struct stu *pstu = stu1;
struct stu *pstu = stu; struct stu *pstu = stu;还应该注意,结构体和结构体变量是两个不同的概念:结构体是一种数据类型,是一种创建 变量的模板,编译器不会为它分配内存空间,就像 int、float、char 这些关键字本身不占用内存一样;结构体变量才包含实实在在的数据,才需要内存来存储。下面的写法是错误的, 不可能去取一个结构体名的地址,也不能将它赋值给其他变量:
struct stu *pstu = stu; struct stu *pstu = stu;
获取结构体成员
通过结构体指针可以获取结构体成员,一般形式为:
(*pointer).memberName
(*pointer).memberName
或者:
pointer-memberName
pointer-memberName
第一种写法中, . 的优先级高于 *,(*pointer) 两边的括号不能少。如果去掉括号写作
*pointer.memberName,那么就等效于*(pointer.numberName),这样意义就完全不对了。
第二种写法中,-是一个新的运算符,习惯称它为“箭头”,有了它,可以通过结构体指针
直接取得结构体成员;这也是-在 C 语言中的唯一用途。
上面的两种写法是等效的,我们通常采用后面的写法,这样更加直观。
【示例】结构体指针的使用。
{
{
structstu{ //定义结构体和结构体名字
char *name; //姓名intnum; //学号
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;
}
【示例】结构体数组指针的使用。
structstu{ //
structstu{ //定义结构体和结构体名字char *name; //姓名
intnum; //学号
int age; //年龄
char group; //所在小组float score; //成绩
}stus[]={
{Zhou
您可能关注的文档
- 降膜蒸发器的设计.docx
- 降水施工分包合同.docx
- 酱油中氯化钠的测定.docx
- 酱油中氯化钠含量的测定.docx
- 郊区新城如何走向独立城市.docx
- 胶粉聚苯颗粒外墙保温系统施工流程.docx
- 焦化厂熄焦水处理技术方案.docx
- 焦急地等人写一段话.docx
- 焦虑状态护理常规.docx
- 焦作分析和总结.docx
- 温州乐成寄宿中学2023年高三第二次模拟考试语文试卷含解析.doc
- 湖南省浏阳市第二中学2022-2023学年高三第一次调研测试语文试卷含解析.doc
- 甘肃省张掖市高台县重点名校2024年中考一模英语试题含答案.doc
- 甘肃省会宁县第四中学2024届高三下学期第六次检测语文试卷含解析.doc
- 滁州市重点中学2024届高三第四次模拟考试语文试卷含解析.doc
- 福建省福州市仓山区福建师范大学附属中学2023届高考冲刺模拟英语试题含解析.doc
- 福建省平和县一中2022-2023学年高考压轴卷语文试卷含解析.doc
- 湖南省长沙市一中、湖南师大附中2023年高三英语第一学期期末学业质量监测模拟试题含解析.doc
- 监狱警察职业道德培训课件.pptx
- 福建省漳州市平和一中、南靖一中等五校2023年高三第六次模拟考试语文试卷含解析.doc
最近下载
- Aero ASM设备线弧讲解.docx
- 建筑业应收账款管理现状及存在的问题对策和建议.docx
- 电力拖动自动控制系统-第五版 课后习题答案.pdf
- 浙教版一年级上册数学期末测试卷(名师系列).doc VIP
- 2021年10月浙江省宁海县事业单位招聘考试《会计基础知识》试卷及答案(解析版).pdf VIP
- 刑法学04共同犯罪.pptx VIP
- 《运馅饼》幼儿园中班语言PPT课件.pptx VIP
- 羽毛球比赛欣赏与竞赛规则11.ppt
- 2024年二建继续教育-建筑工程临时支撑体系施工安全管理1、2答案.docx VIP
- 高考语文复习--一张简表明知识&一次训练提能力系列(鉴赏技巧)(教案).docx
文档评论(0)