首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

C primer 读书笔记 构造1

2012-11-09 
C primer 读书笔记 结构1在现在的C中,结构不仅可以做为参数传递给函数,也可以作为函数返回返回。把结构作为

C primer 读书笔记 结构1

在现在的C中,结构不仅可以做为参数传递给函数,也可以作为函数返回值返回。把结构作为函数参数可以将结构信息传递给函数,使用函数返回可以将结构信息从被调用函数传递给调用函数,同时结构指针也可以双向通信。

例子:指针处理结构

#include<stdio.h>#include <string.h>struct name { char fname[20]; char lname[20]; int letters;}; void getinfo(struct name *);void makeiinfo(struct name *);void showinfo(const struct name *);int main(void){ struct name person; getinfo(&person); makeinfo(&person); showinfo(&person); return 0;}void getinfo(struct name *pst){ printf("plesas enter your first name"); gets(pst->fname); printf("plesas enter your last name"); gets(pst->lname);}void makeinfo(struct name *pst ){pst->letters = strlen(pst->fname)+strlen(pst->lname);}void showinfo(const struct name *pst){printf("%s %s ,you name contains %d letters \n",pst->fname,pst->lname,pst->letters);} 


 

 

person 结构的地址传递给了每个函数。

getinfo 函数把信息从它自身传递给了main,具体地,它从用户处获取姓名,通过使用指针pst定位把姓名放入到person结构中。
虽然getinfo 函数给主程序提供了信息,但是它并没用使用返回机制,因此它是void 类型的。

函数makeinfo 执行信息是双向传送。它通过一个指向person的指针来确定结构中存储的姓和名的位置。它使用strlen 来计算姓和名的字母总数。
然后使用person 的地址存储这个总数。它的类型也是void 型。

最后showinfo 函数使用一个指针定位打印的信息。因为这个函数不改变数组的内容,所以它把指针声明为const.

在所有的操作中,只有一个结构变量person,每个函数使用该结构的地址访问它。其中一个函数将信息从函数自身传递给调用程序,一个函数将
信息从调用程序传递给函数自身,一个函数两个工作都做。

 

现在看看如何使用结构参数和返回值来完成这个任务。
第一为了使用结构本身,需要使用person 而不是&person,这样相应的形式参数应该声明为struct name类型,而不是声明为指向该类型的指针。
第二要把结构的值提供给main函数,可以返回一个结构。
前一个版本中,传递进来的是 person 的地址,函数处理的是实际的person 值 。在第二个版本中创建了一个名为info的新的结构变量
person 中存储的值被复制至info中,函数处理这个副本。因此在计算字母总数时,将把值存储至info里,而不是person里。然后,
返回机制弥补了这一点。

 

 

#include<stdio.h>#include <string.h>struct name { char fname[20]; char lname[20]; int letters;}; struct name getinfo(void);struct name makeinfo(struct name );void showinfo(const struct name );int main(void){ struct name person; person = getinfo(); person = makeinfo(person); showinfo(person); return 0;}struct name getinfo(void){ struct name temp; printf("plesas enter your first name"); gets(temp.fname); printf("plesas enter your last name"); gets(temp.lname); return temp;}struct name makeinfo(struct name info ){ info.letters = strlen(info.fname)+strlen(info.lname); return info;}void showinfo(const struct name info){printf("%s %s ,you name contains %d letters \n",info.fname,info.lname,info.letters);} 


 


 

 

热点排行