当前位置:文档之家› C语言中指针和数组名的用法,结构体与共用体的总结

C语言中指针和数组名的用法,结构体与共用体的总结

C语言中指针和数组名的用法,结构体与共用体的总结2010-01-11 19:38在C语言中,指针和数组名通常都可以混用。

例如char *p;访问时,*p跟p[0]是一样的,*(p+1)跟p[1]是一样的。

对于数组char b[5];访问时,b[0]跟*b是一样的,b[2]跟*(b+2)是一样的。

在一般的通信中(例如串口),通常都使用字节传输。

而像float,long int 之类的,有4字节。

我的方法就是取它的地址,强制转换为char型指针,然后当作数组来用。

float x;SBUF=((char*)&x)[0];SBUF=((char*)&x)[1];SBUF=((char*)&x)[2];SBUF=((char*)&x)[3];接收时,刚好倒过来。

更有趣的是,对于数组形式,数组名和后面的偏移量可以随便换。

char buff[10];//或者用 char *buff=&buffer;buff[3]=0xaa;3[buff]=0xaa; //两者是一样的因此,我认为编译器是这么做的:对于形如xxx[yyy]这样的表达式,会转化为*(xxx+yyy),因此写成xxx[yyy]或者写成yyy[xxx]都无所谓了...c语言结构体与共用体学习笔记1Author:yuexingtianDate:Thursday, June 12, 20081结构变量的赋值测试结果:{struct stu{int num;char *name;char sex;float score;}boy1,boy2;boy1.num=15;="yuexingtian";printf("input sex and score\n");scanf("%c %f",&boy1.sex,&boy1.score);boy2=boy1;printf("Number=%d\nName=%s\n",boy2.num,);printf("Sex=%c\nScore=%f\n",boy2.sex,boy2.score);getch();}说明:本程序中用赋值语句给num和name两个成员赋值,name是一个字符串指针变量。

用scanf函数动态地输入sex和score成员值,然后把boy1的所有成员的值整体赋予boy2。

最后分别输出boy2的各个成员值。

本例表示了结构变量的赋值、输入和输出的方法。

2结构变量的初始化对结构变量的初始化(还拿上例举例)说明:本例中,boy2,boy1均被定义为外部结构变量,并对boy1作了初始化赋值。

在main函数中,把boy1的值整体赋予boy2,然后用两个printf语句输出boy2各成员的值。

3结构数组的定义例1、计算学生的平时成绩和不及格的人数struct stu{int num;char *name;char sex;float score;}boy[6]={{101,"yuexingtian",'M',88},{102,"yuechaotian",'M',98},{103,"tianyuexing",'M',96.5},{104,"tianyuechao",'M',99.5},{105,"tianjingli",'F',59.5},{106,"tianjingshan",'M',58},};main(){int i,c=0;float ave,s=0;for(i=0;i<6;i++){s+=boy[i].score;if(boy[i].score<60) c+=1;}printf("s=%f\n",s);ave=s/6;printf("average=%f\ncount=%d\n",ave,c);getch();}测试结果:说明:程序中定义了一个外部结构数组boy,共6个元素,并作了初始化赋值。

在main函数中用for语句逐个累加各元素的score 成员值存于s之中,如score的值小于60(不及格)即计数器C加1,循环完毕后计算平均成绩,并输出全班总分,平均分及不及格人数。

4建立同学录#include"stdio.h"#define NUM 3struct mem{char name[20];char phone[11];};main(){struct mem man[NUM];int i;for(i=0;i<NUM;i++){printf("input name:\n");gets(man[i].name);printf("input phone:\n");gets(man[i].phone);}printf("name\t\t\tphone\n\n");for(i=0;i<NUM;i++)printf("%s\t\t\t%s\n\n",man[i].name,man[i].phone);getch();}测试结果:说明:本程序中定义了一个结构mem,它有两个成员name和phone用来表示姓名和电话号码。

在主函数中定义man为具有mem 类型的结构数组。

在for语句中,用gets函数分别输入各个元素中两个成员的值。

然后又在for 语句中用printf语句输出各元素中两个成员值。

c语言结构体与共用体学习笔记2Author:yuexingtianDate: Saturday,june 14,20081指向结构变量的指针用此例来说明:结构指针变量的具体说明和使用方法。

struct stu{int num;char *nam e;char sex;float score;}boy1={101,"yuexingtian",'M',88.5},*pstu;main(){pstu=&boy1;printf("Number=%d\nName=%s\nSex=%c\nScore=%f\n",boy1.num,,boy1.sex,boy1.score);printf("Number=%d\nName=%s\nSex=%c\nSocre=%f\n",(*pstu).num,(*pstu).name,(*pstu).sex,(*pstu).score);printf("Number=%d\nName=%s\nSex=%c\nScore=%f\n",pstu->num,pstu->name,pstu->sex,pstu->score);getch();}测试结果:说明:本例程序定义了一个结构stu,定义了stu类型结构变量boy1并作了初始化赋值,还定义了一个指向stu类型结构的指针变量pstu。

在main函数中,pstu被赋予boy1的地址,因此pstu指向boy1。

然后在printf语句内用三种形式输出boy1的各个成员值。

从运行结果可以看出:结构变量.成员名(*结构指针变量).成员名结构指针变量->成员名这三种用于表示结构成员的形式是完全等效的。

测试结果:说明:在程序中,定义了stu结构类型的外部数组boy并作了初始化赋值。

在main函数内定义ps为指向stu类型的指针。

在循环语句for的表达式1中,ps被赋予boy的首地址,然后循环5次,输出boy数组中各成员值。

应该注意的是,一个结构指针变量虽然可以用来访问结构变量或结构数组元素的成员,但是,不能使它指向一个成员。

也就是说不允许取一个成员的地址来赋予它。

因此,下面的赋值是错误的。

ps=&boy[1].sex;而只能是:ps=boy;(赋予数组首地址)或者是:ps=&boy[0];(赋予0号元素首地址)3结构指针变量作函数参数例:计算一组学生的平均成绩和不及格的人数,用结构指针变量作函数参数编程。

/*用结构指针变量作函数参数编程*/struct stu{int num;char *nam e;char sex;float score;}boy[3]={{101,"yuexingtian",'M',88},{102,"yuechaotian",'M',98},{103,"zhanghuimei",'F',45},};main(){struct stu *ps;void ave(struct stu *ps);ps=boy;ave(ps);getch();}void ave(struct stu *ps){int c=0,i;float ave,s=0;for(i=0;i<3;i++,ps++){s+=ps->score;if(ps->score<60) c+=1;}printf("s=%f\n",s);ave=s/3;printf("averaga=%f\ncount=%d\n",ave,c);}测试结果:说明:本程序中定义了函数ave,其形参为结构指针变量ps。

boy被定义为外部结构数组,因此在整个源程序中有效。

在main函数中定义说明了结构指针变量ps,并把boy的首地址赋予它,使ps指向boy数组。

然后以ps作实参调用函数ave。

在函数ave中完成计算平均成绩和统计不及格人数的工作并输出结果。

由于本程序全部采用指针变量作运算和处理,故速度更快,程序效率更高。

C语言结构体与共用体学习笔记3Author:yuexingtianDate: Tuesday,June 17,2008动态存储分配main(){struct stu{int num;char *nam e;char sex;float score;}*ps;ps=(struct stu*)m alloc(sizeof(struct stu));ps->num=15;ps->name="yuexingtian";ps->sex='M';ps->score=98.9;printf("Number=%d\nName=%s\nSex=%c\nScore=%f\n", ps->num,ps->nam e,ps->sex,ps->score);getch();}。

相关主题