QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 1332|回复: 0
收起左侧

指向结构变量的指针

[复制链接]
发表于 2013-5-23 13:52:31 | 显示全部楼层 |阅读模式

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

您需要 登录 才可以下载或查看,没有帐号?注册

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 ~
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

快速回复 返回顶部 返回列表