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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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指向结构变量的指针

用此例来说明:结构指针变量的具体说明和使用方法。

相关文档
最新文档