教育改变生活
标题:
【C语言】结构体指针成员访问
[打印本页]
作者:
wander
时间:
2024-6-17 21:32
标题:
【C语言】结构体指针成员访问
本帖最后由 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\t
Num
\t
Age
\t
Group
\t
Score
\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
欢迎光临 教育改变生活 (http://bbs.goldoar.com/)
Powered by Discuz! X3.2