- 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-2024学年高一上学期第三次选科调研考试生物试卷.docx
- 陕西省汉中市部分学校2023-2024学年高一上学期第三次选科调研考试化学试卷.docx
- 陕西省汉中市部分学校2023-2024学年高一上学期第三次选科调研考试历史试卷.docx
- 《祁门种病虫害防治技术规程》.docx
- 四川省眉山市东坡区眉山北外附属东坡外国语学校2024-2025学年高二上学期11月期中考试数学试题.docx
- 陕西省榆林市2025届高三上学期11月第一次模拟检测地理试卷.docx
- 消防车道、救援场地标识设置规范.docx
- 消防车道、救援场地标识设置规范.pdf
- 《祁门种病虫害防治技术规程》.pdf
- 四川省仁寿县铧强中学2024-2025学年高一上学期11月期中地理试卷.docx
文档评论(0)