- 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
您可能关注的文档
最近下载
- 第1部分 专题05:记叙文阅读之环境描写(练习)-中考语文复习 现代文阅读(全国版)(含答案及解析版).docx
- 人教版2019年初中物理 电能、电路、电功综合专题练习(含答案).doc
- 超星学习通 乡村振兴的实践探索(北京大学)章节测验答案尔雅网课答案.pdf VIP
- 2024年6月第英语六级真题(全3套)及答案解析.pdf
- (完整版)数量关系公式.pdf
- 山东省政府采购专家测评题库800-1000.docx VIP
- 新课标人教版高中英语教材词汇表 1-8册(1).doc
- GB/T 5686.7-2022锰铁、锰硅合金、氮化锰铁和金属锰 硫含量的测定 红外线吸收法和燃烧中和滴定法.pdf
- 河北省石家庄市2024年中考一模语文试卷(含答案).pdf VIP
- 全国卷书面表达说题比赛课件.pptx
文档评论(0)