|
马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ u* I% O1 l( E6 C y" k5 L, {
指向结构变量的指针
8 i0 r! ^+ o5 V" H6 h
. O- h* p$ j `/ H 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。! T i Z+ ~( L
结构指针变量说明的一般形式为:' f5 n1 k) ^: x! j) B
struct 结构名 *结构指针变量名4 T; ~5 M ^. ]7 ?
例如,在前面的例题中定义了stu这个结构,如要说明一个指向stu的指针变量pstu,可写为:
2 V% k+ J& U! n, |" k struct stu *pstu;
/ L! L5 R& m) V! G) u6 | 当然也可在定义stu结构时同时说明pstu。与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。 * _8 {8 G5 \# v9 Q) ` r8 O
赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。如果boy是被说明为stu类型的结构变量,则:
& z3 I$ N- v6 ?6 }% t pstu=&boy
" e3 x7 d/ w" o9 M 是正确的,而: n$ i. N; i* j# Z5 s
pstu=&stu
! u, P, |$ r% t: }9 g 是错误的。
( i' C- g) ]1 V m3 N" N) I" k 结构名和结构变量是两个不同的概念,不能混淆。结构名只能表示一个结构形式,编译系统并不对它分配内存空间。只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。因此上面&stu这种写法是错误的,不可能去取一个结构名的首地址。有了结构指针变量,就能更方便地访问结构变量的各个成员。
+ D" g D" D8 H1 h2 ` 其访问的一般形式为:
3 J1 K, D% P) o, J (*结构指针变量).成员名/ Z/ l9 _8 a+ w( n
或为:4 `& `% _- N# G) ]+ G: {; ]
结构指针变量->成员名: ?0 T" g: t: O, A
例如:5 l4 A5 E0 _, h- m. H4 j5 B
(*pstu).num1 @ x4 P( z+ F, ~
或者:! ^ [( V( }8 `$ O d
pstu->num" R8 z, k! h, k3 D
应该注意(*pstu)两侧的括号不可少,因为成员符“.”的优先级高于“*”。如去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。
& F1 _& a1 z9 E! O1 u 下面通过例子来说明结构指针变量的具体说明和使用方法。; P' {+ [0 b$ v+ x& E' A. o
struct stu
9 \* O- H2 C1 k; m {
1 h- f* n1 r j2 a6 ]- ~9 _ int num;; I4 a4 O3 D4 G/ _! C
char *name;
, r9 c: l- c5 |, T char sex;0 p2 L( S: g' s9 j2 Z) _. h, V
float score;
: |& u; o: Q' }1 S } boy1={102,"Zhang ping",'M',78.5},*pstu;' C8 k' Y. y" l+ t1 T/ c/ m
main()& x4 u) z/ }3 F+ h/ u6 B; C
{3 n7 n( i# L6 ~
pstu=&boy1;
( |) }1 T" p* I: w9 r1 i2 Y; B printf("Number=%d\nName=%s\n",boy1.num,boy1.name);+ ]. Z4 {. H2 S9 n) G k
printf("Sex=%c\nScore=%f\n\n",boy1.sex,boy1.score);
1 V1 n" O; V! n. c printf("Number=%d\nName=%s\n",(*pstu).num,(*pstu).name);
9 V; r* G+ a. F9 y0 R! [; r printf("Sex=%c\nScore=%f\n\n",(*pstu).sex,(*pstu).score);; N. x z$ h: p2 X
printf("Number=%d\nName=%s\n",pstu->num,pstu->name);. k5 z3 |: q9 k0 t% |
printf("Sex=%c\nScore=%f\n\n",pstu->sex,pstu->score);
4 Y2 \5 T8 I7 r, i}5 @# o5 R- S! n$ v
* a( S1 y+ G- ~1 f# b9 O
本例程序定义了一个结构stu,定义了stu类型结构变量boy1并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。然后在printf语句内用三种形式输出boy1的各个成员值。从运行结果可以看出:! E2 o2 c4 t# P& L& i
结构变量.成员名
* a& g% ]6 U2 q% C1 h1 H (*结构指针变量).成员名( b( ?7 S3 A$ _& E* @" V* H/ Y
结构指针变量->成员名
+ ^4 E. T. K9 _1 B这三种用于表示结构成员的形式是完全等效的。
, _! \ Z6 x; b' k6 @' r结合市场需求及目前热门技术开设以下精品课程:
) N4 |# O( u7 _: U2 Z' L, | 一、FPGA应用开发班
6 Z1 h6 z+ D3 b0 A; k5 e1 S5 _+ i* L 二、单片机编程培训班9 x9 p0 O4 C0 q. _5 z# u+ F3 T% t
三、单片机综合开发班
: `/ {/ m1 M+ s: ] 四、Android驱动开发班
8 I( l! N1 K7 a* j+ I5 i 五、电子PCB设计培训班 V' [& v m% C" i9 B
六、嵌入式Linux驱动开发班5 k; J# }1 v" c O
七、嵌入式ARM+Linux实训班
( U: Z' Q1 p5 f5 F 八、单片机C语言项目开发班
) d9 L6 Z& @0 ?" w# J 九、嵌入式系统培训就业开发班! _$ R9 w+ v" Q, D6 P' W* H
十、嵌入式cortex-m3+ucos开发实训班7 U! j) Y4 T( K1 C( a0 `
# I. I# F; L' Y( l5 g3 l( h
培训部导师均为我公司一线实际项目开发工程师,具有多年实际开发经验,专长于众多个行业领域,能为学员提供全面的知识点,不仅让您了解基础知识,同时能让您接触到最热门的技术特点和应用技巧。通过实际的经验教学,更能让学员学习一个产品从设计、研制、调试到生产等方方面面的实际技能。
- _& b' s9 Z% d# U# c% l! q" W; _1 x# ?, h
教学特色:
5 h5 W- {4 [( M2 n( Z' }# e4 R0 R 1、采用小班授课(6-8人)、保证教学质量;+ {# O+ S# T: S4 q4 X4 }
2、由具有丰富开发经验的资深项目开发工程师、国际项目经理主讲;
! \0 Q6 W, X4 a5 k) S 3、理论联系实际、边理论边实践、学用结合以实践为主(实践课程占60%以上)手把手教学;: \ N }1 A1 ^9 m2 }) J7 q8 B* n
4、每个课程均有“项目开发课程”,并在资深工程师的指导下完成,让您真正具备项目开发经验;
& L1 r4 B, L: O8 l; s) n 5、长期为学员提供免费技术咨询;
8 e8 R! ]+ Y& R! f3 c6 [ 6、我们的伯乐桥工程为您的就业提供保障,根据学员学习情况,帮助学员进行职业规划;
7 a9 f: G+ l' P; Y2 p" e) U+ q
^9 `6 R) z- {; K5 m6 I7 B! b深圳/郑州嵌入式、单片机、ARM、MIPS、FPGA、Android培训!
/ i$ E% J; L; X/ b2 t免费试听,满意后给您量身定制课程(包学会),快速提高您的技能!
4 o% t7 H! Z0 [1 U- X$ M) |教学特色:名师督学+工程师指导;项目案列解析+实际解决方案!
5 M) ^8 F: z4 H! G2 \' g7 M; U技术顾问:朱老师,QQ:2685896890 电话:18925216388
7 Q3 A/ x$ q0 E* s! Q% E5 i6 s欢迎加入技术交流QQ群:242530001
6 Z& u; ~9 v" V4 Q9 {4 Z; w
/ Z! |# Z: Q" ?) v! H/ [8 Y1 z9 a' O |
|