QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
查看: 1487|回复: 0
收起左侧

指向结构变量的指针

[复制链接]
发表于 2013-5-23 13:52:31 | 显示全部楼层 |阅读模式 来自: 中国广东深圳

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

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

x

6 @/ i$ x! C3 D2 J. L* m2 S指向结构变量的指针
8 X; m0 f. l  Y( R5 l1 v2 I' e; N- Q$ ]" y: f  n# F; N7 j$ B
 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。
1 T  Q4 M" A% G  结构指针变量说明的一般形式为:
  ]- l" |; |5 Q( \4 p0 U0 Q4 O- O      struct 结构名 *结构指针变量名
# T; |) K( g6 x) H  例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:/ o* E' j$ A' F& E: {, ~# I
      struct stu *pstu;! `2 Q- }. G3 K6 r5 G
  当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。
+ }9 m- H/ q2 _1 c3 h$ g; w  赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。如果boy是被说明为stu类型的结构变量,则:' S7 [1 y' q5 w6 ^9 t% d% J
      pstu=&boy
7 g, X. Y8 ?$ z% H% I4 i  是正确的,而:& _0 H/ t. m) _( Y4 q
      pstu=&stu# q2 q3 q, v/ L8 W4 G
  是错误的。" w5 K+ p& v5 o1 \" H7 f( R
  结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。
+ L4 L" ~+ J3 S5 y  g/ p! }# J  其访问的一般形式为:
/ L* h& {/ T- n! y; q) D      (*结构指针变量).成员名
/ X; @8 `) Z! Y& b  或为:* `, L& `* f+ T: G: O
        结构指针变量->成员名
+ M0 V3 P* l  g' A" a! Q% ?9 t" U: z% ?例如:
# P: G. [4 C: p8 n% y  (*pstu).num) J, o, r/ D6 Z4 `) s/ E! P$ H
或者:
/ j4 T: R- O+ X    pstu->num
! n  B8 J0 z& g  应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。6 q* N0 C& j+ S5 E3 Y( P  Z
  下面通过例子来说明结构指针变量的具体说明和使用方法。7 q: T7 U( V; J% c; f7 J
struct stu  [9 O' A5 V- T" o
    {+ {* K- a9 Q9 N* T
      int num;
; I0 w1 S4 y/ c% X* V$ V      char *name;
8 W. F" {0 N( x8 l8 D  G7 n$ r      char sex;' B/ R1 s6 f* M
      float score;
2 U% R9 T' k5 k0 Y    } boy1={102,"Zhang ping",'M',78.5},*pstu;
8 m2 I( B  Y! W4 ]main()2 e9 v7 e" |; g- A- _' d
{
: W( \1 u: v5 w$ Q8 F8 K    pstu=&boy1;5 B$ t8 I0 M* f; u# g$ n
    printf("Number=%d\nName=%s\n",boy1.num,boy1.name);8 X& e- c. p/ o& M* M
    printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
: C! o' {0 Q4 i7 u3 u4 G9 ~! M* n    printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);/ {$ V4 g' |7 r7 L- n+ Q8 j7 Z+ |
    printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);: C3 S: R5 N: O4 }, h
    printf("Number=%d\nName=%s\n",pstu->num,pstu->name);
1 H0 R  K, [4 A+ b5 w2 o' Z    printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);2 I$ f/ `: F* Z$ o1 `" Q6 Q
}8 u- N: l+ M* N) w+ e/ B/ A

% ^6 T+ G( U- u/ |1 q8 n    本例程序定义了一个结构stu,定义了stu类型结构变量boy1并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后在printf语句内用三种形式输出boy1的各个成员值。从运行结果可以看出:
5 _9 j! L0 y' W$ x' G3 v  结构变量.成员名6 X5 l. c. p6 l0 e
  (*结构指针变量).成员名
6 c! U/ G  O, k& n2 b; d& X4 ^1 R( h  结构指针变量->成员名$ C2 A5 T5 w# r: E
这三种用于表示结构成员的形式是完全等效的。
& h0 u1 h$ ^4 \$ }2 G# H结合市场需求及目前热门技术开设以下精品课程:
* {. y% f+ m/ r/ b+ k# G* q    一、FPGA应用开发班2 y/ ~$ j( j2 u: n
    二、单片机编程培训班  i1 J/ q$ ]( R& `5 H& s) C7 ]/ c
    三、单片机综合开发班
1 k' u# J, a" M1 K3 b    四、Android驱动开发班
# c% q, q0 A& b7 x0 Z: K& B    五、电子PCB设计培训班
/ u9 J6 L( Q* t3 Z    六、嵌入式Linux驱动开发班' G( `/ v; l/ @; v! G: _
    七、嵌入式ARM+Linux实训班1 O2 v, V, x3 J2 x: S3 Y" T
    八、单片机C语言项目开发班5 k6 |& U9 a. q2 E% G% t# j
    九、嵌入式系统培训就业开发班
* E; O% E# W- y; E" k1 T8 r    十、嵌入式cortex-m3+ucos开发实训班. v( P2 V! o9 ^3 J

" O: `  C' e8 `# S    培训部导师均为我公司一线实际项目开发工程师,具有多年实际开发经验,专长于众多个行业领域,能为学员提供全面的知识点,不仅让您了解基础知识,同时能让您接触到最热门的技术特点和应用技巧。通过实际的经验教学,更能让学员学习一个产品从设计、研制、调试到生产等方方面面的实际技能。
" o+ s; {1 b+ i6 M) c* z  V$ i( h8 k! ?! w/ j- c1 S3 o
    教学特色:, x2 @! ^5 b% z
    1、采用小班授课(6-8人)、保证教学质量;
  \- J0 a* u. L6 [4 M! l    2、由具有丰富开发经验的资深项目开发工程师、国际项目经理主讲;
/ M% C; v7 a/ U* |* [$ V    3、理论联系实际、边理论边实践、学用结合以实践为主(实践课程占60%以上)手把手教学;
2 \8 I2 P' b% q# a% K! O4 V& f    4、每个课程均有“项目开发课程”,并在资深工程师的指导下完成,让您真正具备项目开发经验;) g) d: V' i$ o- {" W! h
    5、长期为学员提供免费技术咨询;                                                           D$ _9 S% h3 e
    6、我们的伯乐桥工程为您的就业提供保障,根据学员学习情况,帮助学员进行职业规划;. v- v! d# J! M( U, Y4 b

5 a6 S- D/ _6 m- p+ L, e: g深圳/郑州嵌入式、单片机、ARM、MIPS、FPGA、Android培训!
; p! Z& L  B; L' f2 K. S! p免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!
3 K6 ?8 V, `* M. P( Q4 ]- @4 k9 y! R教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!
9 H+ v* E' C' A6 D技术顾问:朱老师,QQ:2685896890      电话:18925216388- A3 u4 j1 i6 K8 j6 ^, B
欢迎加入技术交流QQ群:2425300014 _' H3 x; |# I
- a9 K* H6 t; b# Q7 O1 i
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


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

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

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