您的位置:首页 > 编程语言 > C语言/C++

C语言学习笔记【结构体02】结构体指针变量与结构体变量的函数参数

2013-09-08 21:51 295 查看

C语言学习笔记

之 结构体指针变量

一提指针,那可是C语言的核心了,有多少学子曾拜倒在指针的脚下。单纯的说指针,其实并不难,但是与其它的结构搭配在一起,那可就愁死人了。比如说:数组一点都不难,但是与指针一起用,可就经常麻烦了。结构体也是一种结构,它与指针搭配怎么样呢? 一起来看一下吧!

1:结构体指针变量

和指针指向数组首地址一样,指针也可以指向结构体的起始地址。形式形如: struct student *p;上述语句定义了一个指针变量p,它指向任何一个属于struct student 类型的数据。通过指针去访问所指结构体变量的某个成员时,有两种方法: (*p).score 或者 p->score(这是一种常用的方式。->是指向运算符)比如:

访问的时候:(*p).num=11031,或者 p->num=11031。

2.程序实例

#include <stdio.h>
/*定义结构体*/
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
};
/*初始化一个结构体实例*/
struct student stu[3]={
{11302,"Wang",'F',20,486.69},
{11303,"Zhao",'F',25,466.59},
{11304,"Xue",'M',26,483.59}
};
main()
{
/*初始化一个student1的实例*/
struct student student1={11305,"Li",'F',19,59.59};
struct student *p,*q;//定义struct student类型的指针
int i;
p=&student1;//将student 1的结构体的首地址赋给p,也就是p指向了student 1的首地址
/*输出:可以看到,访问结构体的成员,有三种方法*/
printf("%s,%c,%f\n",student1.name,(*p).sex,p->score);
q=stu;//将数组stu的首地址赋给q;
/*for循环输出数组中的成员*/
for(i=0;i<3;i++,q++)
{
printf("%s,%c,%f\n",q->name,(*q).sex,stu[i].score);
}
}



3.指针符号(->)

P->numP指向的结构体中的成员
P->num++先得到p所指向的结构体成员num,然后使该num的值加1
++p->num先p所指向成员num的值加1,然后引用这个新的值
(p++)->num先引用p->num的值,用完之后再使p加1
(++p)->num先p加1,然后引用p->num的值

4.结构体变量和结构体指针变量做函数参数

结构体变量以及结构体指针变量均可以像int类型那样作为函数的参数。
#include <stdio.h>
/*定义结构体*/
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
};
/*初始化一个结构体实例*/
struct student stu[3]={
{11302,"Wang",'F',20,486.69},
{11303,"Zhao",'F',25,466.59},
{11304,"Xue",'M',18,483.59}
};
/*输出函数,结构体变量s做为函数参数*/
void print(struct student s)
{
printf("%s,%d,%f\n",s.name,s.age,s.score);
}
/*增加成绩的函数,结构体指针q作为函数参数*/
void add(struct student *q)
{
if(q->age<=19)
q->score=q->score+10;
}
main()
{
struct student *p;
int i;
for(i=0;i<3;i++)
{
print(stu[i]);//stu[i]作为形参
}
for(i=0,p=stu;i<3;i++,p++)
{
add(p);//指向stu的指针变量p作为形参
}
printf("\n");
for(i=0,p=stu;i<3;i++,p++)
{
print(*p);//*p作为形参,相当于stu[i]
}
}



上述程序注意的是:调用函数print和add都是void无返回值类型的函数,如果是有返回值的,它的类型应该是struct student类型,也就是说应该是
语言
struct student add(struct student *q)
{
if(q->age<=19)
q->score=q->score+10;
return *q
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Cyu'yan
相关文章推荐