谭浩强c语言word版11内容摘要:
的指针 一个指针变量当用来指向一个结构变量时,称之为结构指针变量。 结构指针变量中的值是所指向的结构变量的首地址。 通过结构指针即可访问该结构变量,这与数组指针和函数指针的情况是相同的。 结构指针变量说明的一般形式为 : struct 结构名 *结构指针变量名 例如,在前面的例题中定义了 stu这个结构,如要说明一个指向 stu的指针变量 pstu,可写为: struct stu *pstu。 当然也可在定义 stu结构时同时说明 pstu。 与前面讨论的各类指针变量相同,结构指针变量也必须要先赋值后才能使用。 赋值是把结构变量的首地址赋予该指针变量,不能把结构名赋予该指针变量。 如果 boy是被说明为 stu类型的结构变量,则: pstu=amp。 boy 是正确的,而: pstu=amp。 stu 是错误的。 结构名 和结构变量是两个不同的概念,不能混淆。 结构名只能表示一个结构形式,编译系统并不对它分配内存空间。 只有当某变量被说明为这种类型的结构时,才对该变量分配存储空间。 因此上面 amp。 stu这种写法是错误的,不可能去取一个结构名的首地址。 有了结构指针变量,就能更方便地访问结构变量的各个成员。 其访问的一般形式为: (*结构指针变量 ).成员名 或为: 结构指针变量 成员名 例如: (*pstu).num 或者: pstunum 应该注意 (*pstu)两侧的括号不可少,因为成员符 “.”的优 先级高于 “*”。 如去掉括号写作 * *(),这样,意义就完全不对了。 下面通过例子来说明结构指针变量的具体说明和使用方法。 【例 】 struct stu { int num。 char *name。 char sex。 float score。 } boy1={102,Zhang ping,39。 M39。 ,},*pstu。 main() { pstu=amp。 boy1。 printf(Number=%d\nName=%s\n,)。 printf(Sex=%c\nScore=%f\n\n,)。 printf(Number=%d\nName=%s\n,(*pstu).num,(*pstu).name)。 printf(Sex=%c\nScore=%f\n\n,(*pstu).sex,(*pstu).score)。 printf(Number=%d\nName=%s\n,pstunum,pstuname)。 printf(Sex=%c\nScore=%f\n\n,pstusex,pstuscore)。 } 本例程序定义了一个结构 stu,定义了 stu类型结构变量 boy1并作了初始化赋值,还定义了一个指向 stu类型结构的指针变量 pstu。 在 main函数中, pstu被赋予 boy1的地址,因此 pstu 指向 boy1。 然后在 printf语句内用三种形式输出 boy1的各个成员值。 从运行结果可以看出: 结构变量 .成员名 (*结构指针变量 ).成员名 结构指针变量 成员名 这三种用于表示结构成员的形式是完全等效的。 指向结构数组的指针 指针变量可以指向一个结构数组,这时结构指针变量的值是整个结构数组的首地址。 结构指针变 量也可指向结构数组的一个元素,这时结构指针变量的值是该结构数组元素的首地址。 设 ps为指向结构数组的指针变量,则 ps也指向该结构数组的 0号元素, ps+1指向 1号元素, ps+i则指向 i号元素。 这与普通数组的情况是一致的。 【例 】用指针变量输出结构数组。 struct stu { int num。 char *name。 char sex。 float score。 }boy[5]={ {101,Zhou ping,39。 M39。 ,45}, {102,Zhang ping,39。 M39。 ,}, {103,Liou fang,39。 F39。 ,}, {104,Cheng ling,39。 F39。 ,87}, {105,Wang ming,39。 M39。 ,58}, }。 main() { struct stu *ps。 printf(No\tName\t\t\tSex\tScore\t\n)。 for(ps=boy。 psboy+5。 ps++) printf(%d\t%s\t\t%c\t%f\t\n,psnum,psname,pssex,psscore)。 } 在程序中,定义了 stu结构类型的外部数组 boy并作了初始化赋值。 在 main函数内定义ps为指向 stu类型的指针。 在循环语句 for的表达式 1中, ps被赋予 boy的首地址,然后循环 5次,输出 boy数组中各成员值。 应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能使它指向一个成员。 也就是说不允许取一个成员的地址来赋予它。 因此,下面的赋值是错误的。 ps=amp。 boy[1].sex。 而只能是: ps=boy。 (赋予数组首地址 ) 或者是: ps=amp。 boy[0]。 (赋予 0号元 素首地址 ) 结构指针变量作函数参数 在 ANSI C标准中允许用结构变量作函数参数进行整体传送。 但是这种传送要将全部成员逐个传送,特别是成员为数组时将会使传送的时间和空间开销很大,严重地降低了程序的效率。 因此最好的办法就是使用指针,即用指针变量作函数参数进行传送。 这时由实参传向形参的只是地址,从而减少了时间和空间的开销。 【例 】计算一组学生的平均成绩和不及格人数。 用结构指针变量作函数参数编程。 struct stu { int num。 char *name。 char sex。 float score。 }boy[5]={ {101,Li ping,39。 M39。 ,45}, {102,Zhang ping,39。 M39。 ,}, {103,He fang,39。 F39。 ,}, {104,Cheng ling,39。 F39。 ,87}, {105,Wang ming,39。 M39。 ,58}, }。 main() { struct stu *ps。 void ave(struct stu *ps)。 ps=boy。 ave(ps)。 } void ave(struct stu *ps) { int c=0,i。 float ave,s=0。 for(i=0。 i5。 i++,ps++) { s+=psscore。 if(psscore60) c+=1。 } printf(s=%f\n,s)。谭浩强c语言word版11
相关推荐
被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。 如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。 被写入的文件若不存在,则创建该文件。 2) 每写入一个字符,文件内部 位置指针向后移动一个字节。 3) fputc函数有一个返回值,如写入成功则返回写入的字符,否则返回一个 EOF。
,号召大家想办法争取能够弄清疑点。 讨论中该同学当众朗读了一份自称是公安系统内部人士的网友写的案情分析。 这名同学还表示,谭母曾告诉记者,住在东风广场事发房间的某位韩国男子平时经常想约会谭静,而谭静一直对其持反感态度。 该男子还经 常谎称有事找她借机搭话,而屡次都被谭静婉转回避。 事发当天因一名两人都认识的韩国朋友要回国,谭静这才和他一起喝酒。 记者注意到,当朱维笳说这些的时候
08 摇篮曲 /09 古诺派第 /10 野蜂飞舞 /11 梦幻 曲 /12 间奏曲 /13 跳舞娃娃 /14 加沃特舞曲 /15 一分钟圆舞曲 TC长笛与竖琴:小船( 1C) 1小船 /2摇篮曲 /3沉思 /4西西里舞曲 /5间奏曲 /6哈巴涅拉 /7天鹅 /8幽默曲 /9练习曲 /10幻想曲 /11小步舞曲 /12伦顿德里小调/13小丑 /14摇篮曲 /15古诺派第 /16野蜂飞舞
一个性侵害者,也从不会想到自己会遇到这样的人。 也有很多的家长,误以为告诉孩子不要在网上与陌生人谈话聊天,就应该是安全的了,但事实却不是这样。 虽然孩子想 像中的陌生人是一个可怕、面目狰狞的人,但如果有一个人,他常与孩子聊天并交换照片,这个人在孩子的心中就再也不是陌生人了。 与孩子订定上网规矩 Christine Loftus 说: “家长应注意孩子在网路上会遇到的各样危险
is a friend indeed. *in need “遇到难处,贫穷 ”, indeed 是 “真正的 ”,这两个词押韵,给人以节奏感。 只会工作不会玩的人是没意思的人。 All work and no play makes Jack a dull boy. *这句可以译成 “只让学习不让玩的孩子会变成愚蠢的孩子 ”。 事实胜于雄辩。 The proof of the pudding is
险、更孤独。 这些地方被称为城市的自然地区”。 他特别指出,“从方法论来看,人类学家博厄斯和罗维( Lowei)考察北美印第安人生活方式时所使用的细致方法,若应用于现代人的研究定会更有成果”。 (帕克等, 1987)于是犹太人社区、意大利人上去、波兰 人、德国人、中国城等大城市中的小社区、亚文化地区和社团都成了研究对象,与此同时,小城市、乡村、郊区等“民俗社会”的研究也得到推动。 [8]