C语言中指针和数组名的用法,结构体与共用体的总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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语言结构体与共用体学习笔记1
Author:yuexingtian
Date:Thursday, June 12, 2008
1结构变量的赋值
测试结果:
{
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 3
struct mem
{
char name[20];
char phone[11];
};
main()
{
struct mem man[NUM];
int i;
for(i=0;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 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语言结构体与共用体学习笔记2 Author:yuexingtian Date: Saturday,june 14,2008 1指向结构变量的指针 用此例来说明:结构指针变量的具体说明和使用方法。