|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
% E$ W! T o7 }5 N) u指向结构变量的指针
B2 e/ R6 y/ Q$ W' m" V: P$ m; @ T
一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。* \# ?; N; u' W0 E$ }
结构指针变量说明的一般形式为:$ K5 }& V& w7 L) R& R- X
struct 结构名 *结构指针变量名* ?2 g2 R- {- ?/ X2 F
例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:2 s2 d( p7 f% l8 T+ l( v
struct stu *pstu;
0 a) e8 i6 D% w J- s 当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。 1 B. s# a: p' }: {" A2 J# A: L/ B
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。如果boy是被说明为stu类型的结构变量,则:
# y% {* v/ L1 O6 y, J; B pstu=&boy/ u( k. B ~( x, T6 d4 U2 R& G
是正确的,而:
$ k) Z/ e* z( I& O6 `9 } C, w pstu=&stu
5 r4 h7 ^- I j& ^ 是错误的。
: |9 w4 I" p. x) F5 W3 S 结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。3 z- E/ t: H0 k. f) [0 i& V
其访问的一般形式为:; B# \8 b, u. T+ `. x: t5 W- D
(*结构指针变量).成员名
% |( o! M/ h% {: c9 ^+ o* b: Z 或为:
* e: W$ T d1 J& _$ h( R" [ 结构指针变量->成员名4 F$ _) Z+ s3 {% s; E' H' O
例如:8 V+ @+ j3 T( b! a5 t$ R5 \
(*pstu).num; O( j/ u( ~0 \3 B$ n
或者:
% m7 I' M5 g# i) p- P pstu->num4 G: d; z- _0 A3 W1 b5 K- G" [
应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。
# R6 H0 m9 C, D/ H: b1 g; I8 y 下面通过例子来说明结构指针变量的具体说明和使用方法。
' ?( d' y2 m- ]2 Xstruct stu1 J' j3 m8 D6 s. `& |) ?% Z4 K
{/ P! R; b) x( E2 R/ h& ?
int num;3 w2 V* i2 {* o: Z3 x
char *name;
$ P: h/ L1 L0 M6 b* L' \! Z char sex;+ k' F" A3 A$ g" Q
float score;
: h; i! G2 f e9 v- v: k } boy1={102,"Zhang ping",'M',78.5},*pstu;' D; U, W: x# P" f5 [
main()
+ j5 D `3 Z7 H4 P" Z- p' f{8 E1 d/ ^6 e B3 A
pstu=&boy1;
2 d& w$ }! I0 B* P& W( g( {0 _' h! n printf("Number=%d\nName=%s\n",boy1.num,boy1.name);4 w/ v. z/ s8 W
printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
1 q% ?, F; \( d [; o6 X printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
; M( G, X# y4 i/ @- I( Z' Y1 H printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);) J) ^' r6 b; G, `4 a
printf("Number=%d\nName=%s\n",pstu->num,pstu->name);+ g+ e2 P6 \( G1 \* t
printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);& V' K1 ?& Y+ i9 b+ J* D
}+ S' I$ B5 ?" o1 f3 w
; l2 I. p! _3 ?' b ~/ s+ [
本例程序定义了一个结构stu,定义了stu类型结构变量boy1并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后在printf语句内用三种形式输出boy1的各个成员值。从运行结果可以看出:& }( u# _& f5 s6 ]
结构变量.成员名
: e& j8 c- m, U! W/ g7 f& \ (*结构指针变量).成员名
t0 J. Y9 s1 g# f2 q8 r7 s1 w 结构指针变量->成员名% c# @# v3 L! J3 r; J4 N" Q" n
这三种用于表示结构成员的形式是完全等效的。1 S& S. i6 T, ]9 z. f& K" y
结合市场需求及目前热门技术开设以下精品课程:; {4 w- w, b! E
一、FPGA应用开发班+ V: N/ s5 j8 D5 {2 K7 a3 B
二、单片机编程培训班0 U5 {9 p) n6 [7 L
三、单片机综合开发班7 L& ] u: {8 x, P Q1 E
四、Android驱动开发班9 F+ {! f% n% _* B, q6 e
五、电子PCB设计培训班
4 t5 p# _; _- }1 G% M1 y. h 六、嵌入式Linux驱动开发班: u7 A- g4 ?0 f6 G! W
七、嵌入式ARM+Linux实训班8 b+ f* p" V( h& r/ P! h' X
八、单片机C语言项目开发班
+ [% ] z& S4 q7 U) I" L 九、嵌入式系统培训就业开发班
( b) y& }8 ]& `( L; n/ g! s 十、嵌入式cortex-m3+ucos开发实训班9 }8 V, B* v8 }2 S p: R R
8 A4 e$ I' {, o5 k# \/ _
培训部导师均为我公司一线实际项目开发工程师,具有多年实际开发经验,专长于众多个行业领域,能为学员提供全面的知识点,不仅让您了解基础知识,同时能让您接触到最热门的技术特点和应用技巧。通过实际的经验教学,更能让学员学习一个产品从设计、研制、调试到生产等方方面面的实际技能。# p }' k. A4 v8 A
; e; z$ o5 ], F" _+ P2 }' | 教学特色:
3 Z! s8 [, Q, y2 [ 1、采用小班授课(6-8人)、保证教学质量;
& `: D- N9 d) v8 V 2、由具有丰富开发经验的资深项目开发工程师、国际项目经理主讲;
% Q+ D& `; I# p; d" J; Q) }! a 3、理论联系实际、边理论边实践、学用结合以实践为主(实践课程占60%以上)手把手教学;4 u1 H7 m& ~# @ ?1 H9 ]1 M# Y
4、每个课程均有“项目开发课程”,并在资深工程师的指导下完成,让您真正具备项目开发经验;
C1 R: ^9 n6 z" b 5、长期为学员提供免费技术咨询;
1 q: u- X9 A x9 z9 C( M 6、我们的伯乐桥工程为您的就业提供保障,根据学员学习情况,帮助学员进行职业规划;
+ C6 h a% R; |+ j9 D# B/ L' q# c* d3 b' C
深圳/郑州嵌入式、单片机、ARM、MIPS、FPGA、Android培训!
3 `% O' F O" b. m5 q免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!# B( R) N& i- ]/ ?; C q
教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!" f# _. q) `7 m8 [6 \
技术顾问:朱老师,QQ:2685896890 电话:18925216388
- L' u T. S l欢迎加入技术交流QQ群:2425300017 x- N+ ~, y" `( b0 N
7 {% ~2 e! o: R3 N N8 {5 ~
|
|