|
|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
! T( D4 Y* f8 u- H3 C5 X1 A
指向结构变量的指针
8 e, H; g9 X9 A& G* l) F: D- N/ e2 q, Y' g
一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。
& [; m3 z6 z# E) d 结构指针变量说明的一般形式为:1 a! `0 u6 h6 N# {1 x
struct 结构名 *结构指针变量名5 H7 @3 a. y- K. d6 i
例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:
- G1 d, P. Y2 x3 o8 x4 c/ K struct stu *pstu;+ j, B9 K. e3 j
当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。 2 N3 E. A! D1 n: y3 J# ]6 K
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。如果boy是被说明为stu类型的结构变量,则:
3 q) G6 F, Y- x. O2 h pstu=&boy
* r7 Y/ J8 F% X( N$ z" H8 C 是正确的,而:
. b* F9 {1 i: Z, l2 W pstu=&stu9 E6 f. i2 ^. k5 @1 j
是错误的。
5 W8 I7 J! d+ s 结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。
, h- x u+ t5 r& E 其访问的一般形式为:* k7 Q4 ?$ v5 h
(*结构指针变量).成员名
( w/ a; m2 w o5 b) a 或为:
/ `% i a7 C4 ^& u: _6 v! ` q 结构指针变量->成员名
- v8 A7 N2 C% A8 j+ M0 k( g3 q. H例如:
[! Z$ d' B4 R: l' C (*pstu).num
: i7 v' |5 M. c" B6 P/ f0 t或者:1 l, \; p' \- ?5 s4 ~- k
pstu->num
* h4 T9 `) y& W5 d+ X 应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。
: ^4 k- M0 J9 T! k 下面通过例子来说明结构指针变量的具体说明和使用方法。7 m2 u. s! H7 ~( e( z5 Y% u
struct stu9 c# R1 d4 O- c- v! \8 b# Z& A( w1 C
{2 Z8 r( V" I& T8 |7 N( [0 b
int num;1 G r- G6 e3 H! O
char *name;
" }) W& X- f. t* m char sex;
z( r0 z3 B) F float score;& N7 j1 s# n0 c5 O& z* y' L; x+ w
} boy1={102,"Zhang ping",'M',78.5},*pstu;
# p3 t2 C1 m2 X) |main()
, e: I* V& C( Q& y9 m{
# b# ]( h& z5 @6 z. s pstu=&boy1;+ j5 `5 C5 s" ^: J
printf("Number=%d\nName=%s\n",boy1.num,boy1.name);% t! |6 z4 y a
printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
0 p! p* o* K' F; R" K printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
1 H: L8 Y- I: ^! W* Y$ Y5 ~ printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);
0 \2 e2 Q, f8 ^ printf("Number=%d\nName=%s\n",pstu->num,pstu->name);. W2 d. w$ b9 |+ s. {; c6 Y
printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);
3 \; w8 Q+ j$ b4 y8 c3 o5 }, _}
& P* m% x6 e/ j# i$ t6 L0 o
3 i! C; q' w! _ 本例程序定义了一个结构stu,定义了stu类型结构变量boy1并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后在printf语句内用三种形式输出boy1的各个成员值。从运行结果可以看出:
! w6 R8 |5 M( S% r# B 结构变量.成员名
9 E( G3 t; f4 O: v. T* k# k* d (*结构指针变量).成员名
# ~: R k, k" v2 K- ?+ d 结构指针变量->成员名) O+ I! a2 m/ z8 Z5 X
这三种用于表示结构成员的形式是完全等效的。
6 u4 E( b m' ~; L- E" g, J8 P& P, b结合市场需求及目前热门技术开设以下精品课程:
# a9 X3 q& i8 l9 r! Z 一、FPGA应用开发班
) [! B6 a7 M" G6 v 二、单片机编程培训班: X, O. L5 ?7 k, z7 \
三、单片机综合开发班. U" \9 a o) f& M/ S; W1 C K
四、Android驱动开发班6 @4 z" ?, F- W e' |/ ~
五、电子PCB设计培训班, Q4 n- e; _8 z! Y& l
六、嵌入式Linux驱动开发班
7 R# @: l' f) G% c 七、嵌入式ARM+Linux实训班3 D# [. J2 H- {" J
八、单片机C语言项目开发班
3 y& Z# M( s4 e/ ~* ~ 九、嵌入式系统培训就业开发班, t3 W& p$ Y$ j8 K- Q2 v
十、嵌入式cortex-m3+ucos开发实训班
5 O% y& P1 }# G. f4 s: c& c; G1 T! B6 j
培训部导师均为我公司一线实际项目开发工程师,具有多年实际开发经验,专长于众多个行业领域,能为学员提供全面的知识点,不仅让您了解基础知识,同时能让您接触到最热门的技术特点和应用技巧。通过实际的经验教学,更能让学员学习一个产品从设计、研制、调试到生产等方方面面的实际技能。
- c- s8 n# L! V: v& ?1 A- s! Y; i! k8 P
教学特色:1 w& |7 `' S f7 \. ^6 ^9 Y$ r! H
1、采用小班授课(6-8人)、保证教学质量;
_# G4 p3 ?' v1 P+ c6 y) c 2、由具有丰富开发经验的资深项目开发工程师、国际项目经理主讲;9 n4 k( n9 \* f& Y' P- E: m
3、理论联系实际、边理论边实践、学用结合以实践为主(实践课程占60%以上)手把手教学;
1 W a7 h8 n% J8 C4 \ 4、每个课程均有“项目开发课程”,并在资深工程师的指导下完成,让您真正具备项目开发经验;
4 S5 j5 K8 U; @ 5、长期为学员提供免费技术咨询; - ]# x$ x2 T& S& q0 S2 j
6、我们的伯乐桥工程为您的就业提供保障,根据学员学习情况,帮助学员进行职业规划;7 J( \4 x: B8 P1 G; j
. Q6 Z# A2 s: F c9 }0 Y
深圳/郑州嵌入式、单片机、ARM、MIPS、FPGA、Android培训!% W) ]5 \: E9 w; `: z- Z
免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!
. y; j& W9 E) e1 s7 M教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!
6 n- M- b. Q8 `) X9 E4 Y技术顾问:朱老师,QQ:2685896890 电话:18925216388
. L- L) ~% O( K; N欢迎加入技术交流QQ群:242530001
: X' Y- Q$ `% }% S
( W' F! ^; u0 u/ i |
|