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

C语言学习笔记

之结构体指针变量

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

1:结构体指针变量

和指针指向数组首地址一样,指针也可以指向结构体的起始地址。

形式形如:  struct  student  *p;

上述语句定义了一个指针变量p,它指向任何一个属于struct student类型的数据。通过指针去访问所指结构体变量的某个成员时,有两种方法:

(*p).score或者p->score(这是一种常用的方式。->是指向运算符)

比如:

c76cddfea6aa4f5b1388a4bd650452b0.png

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

2.程序实例

#include

/*定义结构体*/

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);

}

}

44c6d52bc88ccb32f0739a9e761b1539.png

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

/*定义结构体*/

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]

}

}

4a80f2d57120007e8a4833d2ea13670c.png

上述程序注意的是:调用函数print和add都是void无返回值类型的函数,如果是有返回值的,它的类型应该是struct student类型,也就是说应该是语言struct student add(struct student *q)

{

if(q->age<=19)

q->score=q->score+10;

return *q

}

本文出自 “赵玉强的博客” 博客,请务必保留此出处http://zhaoyuqiang.blog.51cto.com/6328846/1292014

http://www.dengb.com/Cyy/617171.htmlwww.dengb.comtruehttp://www.dengb.com/Cyy/617171.htmlTechArticleC 语言学习笔记 之 结构体指针变量 一提指针,那可是 C 语言的核心了,有多少学子曾拜倒在指针的脚下。单纯的说指针,其实并不难,但...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值