C语言中结构体与共用体(三)

指向结构体类型数据的指针

一个结构体变量的指针就是这个结构体变量所占据的内存段的起始地址。

用指针变量指向结构体变量,此时这个指针变量的值是结构体变量的起始地址。

指针变量也可以用来指向结构体数组中的元素

结构体指针变量一般形式为:

struct   结构名   *结构指针变量名

如:struct   stu   *stu1;

当然也可以在定义结构体的同时来说明stu1

结构体结构体指针变量也必须先赋值在使用

赋值是把结构变量的首地址赋予这个指针变量,不能把结构名赋予这个指针的变量

如:

stu1=&boy;(正确)

stu1=stu;(错误)

这个是由于结构名只是一个结构形式系统并不对它分配内存空间,只有变量编译系统才会对他分配内存空间。

访问形式:

(*结构指针变量).成员名

如:(*stu1).num

或者

结构指针变量->成员名

如:stu1->num

例如:

#include<stdio.h>
struct stu{
int num;
char *name;
char sex;
float score;
}stu1={101,"join",'m',99};
void main(){
struct stu *stu2;
stu2=&stu1;
print("number=%d\nname=%s\n",stu1.num,stu1.name);
print("sex=%c\nscore=%f\n\n",stu1.sex,stu1.score);
print("number=%d\nname=%s\n",(*stu2).num,(*stu2).name);
print("sex=%c\nscore=%f\n\n",(*stu2).sex,(*stu2).score);
print("number=%d\nname=%s\n",stu2->num,stu2->name);
print("sex=%c\nscore=%f\n\n",stu2->sex,stu2->score);

}

结构指针变量做函数参数

如果将一个结构体变量的值传递给另一个函数,那么有三种方法:

(1)用结构体变量的成员作参数;
(2)用结构体变量作实参;
(3)用指向结构体变量(或数组)的指针作实参,将结构体变量(或数组)的地址传给形参

例如:

用结构体变量作函数参数

#include<stdio.h>
#include<string.h>
struct student {
int num;
char name[10];
float score[5];
};
void print(struct student);
void main(){
struct student stu;
stu.num=9;
strcpy(stu.name,"stu");
stu.score[0]=99;
stu.score[1]=88;
stu.score[2]=77;
print(stu);
}
void print(struct student stu){
print("\tnum:%d\n",stu.num);
print("\tname:%s\n",stu.name);
print("\tscore1:%3\n",stu.score[0]);
print("\tscore2:%5\n",stu.score[1]);
print("\tscore3:%7\n",stu.score[2]);
}


改用指向结构变量的指针作实参

#include<stdio.h>
#include<string.h>
struct student {
int num;
char name[10];
float score[5];
};
void print(struct student*);
void main(){
struct student stu;
stu.num=9;
strcpy(stu.name,"stu");
stu.score[0]=99;
stu.score[1]=88;
stu.score[2]=77;
print(&stu);
}
void print(struct student*){
print("\tnum:%d\n",stu.num);
print("\tname:%s\n",stu.name);
print("\tscore1:%3\n",stu.score[0]);
print("\tscore2:%5\n",stu.score[1]);
print("\tscore3:%7\n",stu.score[2]);
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值