Autoleaders控制组-C语言结构体学习笔记

1.结构类型

基本构成:

struct 结构体名 类型名 成员名
例:

struct student
{int num;
char name[9];
char sex;
int age;
double score;};(最后分号不能漏)

结构变量的定义:

先声明结构体类型再定义变量名;

struct student student1,student2;

通常在函数外声明结构

声明结构的形式:

1.基本形式如上;

2.无名结构

struct {
int x;
int y;
}p1,p2;

3.同时定义结构类型和结构变量

struct point{
int x;
int y;
}p1,p2;

初始化

  1. 按成员顺序赋值

struct point p1={2,3};

  1. 分别给成员赋值
    访问结构中的成员用结构变量名,成员名;

struct point p2={.y=3,.x= 2};

结构运算

p1=(struct point){2, 3}; >>p1.x=2,p1.y=3;
p1=p2>>p1.x=p2.x,p1.y=p2.y;

结构取地址要用&;

2.结构与函数

结构作为函数参数

可以返回一个结构,但不会改变原本的结构;

输入结构

无法直接scanf一个结构;
设计函数输入结构:
令函数返回一个结构值再令要赋值的结构与之相等

#include<stdio.h>
struct re{
	int e;
	int r;
};
struct re getstruct(void);
void putstruct(struct re p);
int main(){
	struct re k=getstruct();
	putstruct(k);
	return 0;
}
struct re getstruct(void){
	struct re p;
	scanf("%i %i",&p.e,&p.r);
	return p;
}
void putstruct(struct re p){
	printf("%i %i",p.e,p.r);
}

用指针作为参数向函数传入结构:

指针访问结构成员:

struct date{
int y;
int m;
int d;}today;
struct date *p=&today;
指针访问:***p->y=12;==(p).y=12; ==today.y=12;

#include<stdio.h>
struct re{
	int r;
	int e;
};
struct re *getstruct(struct re*o);
void output(struct re o);
void print(const struct re *o);
int main(){
	struct re k={0,0};

	struct re *f=getstruct(&k);
	output(k);
//	output(*f);
//	print(f);
	output(*getstruct(&k));//*getstruct(&k)就是getstruct(&k)所指的结构, 
	print(getstruct(&k));//在函数中以另一函数为参数时,另一函数会运行;
	return 0;//此处getstruct会运行三遍,所以需输入三次
}
struct re* getstruct(struct re*o){
scanf("%d%d",&o->r,&o->e);
return o;
}
void output(struct re o){
	printf("%d %d\n",o.r,o.e);
}
void print(const struct re *o){
	printf("%d %d\n",o->r,o->e);
}

3.结构中的结构

结构数组

struct date{
int y;
int m;
int d;};
struct date d[n];>>有n个含有y,m,d成员的结构变量,分为d[0]~d[n-1]

赋值:

struct date d[]={{1972,8,26},{2004,11,23}};>>struct date d[0]=(struct date){1972,8,26};struct date d[1]=(struct date){2004,11,23};

结构中的结构

#include<stdio.h>
struct who{
	char name[100];
	int age;
	char sex;
};
struct two{
struct who first;//已定义two中的who类型变量名为为first和second 
struct who second; 

};


int main(){
	
	struct two jokerandbatman;
	jokerandbatman.first.name=joker;
	jokerandbatman.first.age=28;
	jokerandbatman.first.sex=x;
	jokerandbatman.second.name=batman;
	jokerandbatman.second.age=83;
	jokerandbatman.second.sex=x;
	
} 

访问单个成员需从外部结构开始访问;

struct two r,*rp;
*rp=&r;
r.first.name<==>rp->first,name

结构中的结构的数组

struct two class[n];
则class[i] (0<=i<n)为一个two结构体;
访问使用class[i].

赋值用{}包含同一结构层次,以,分隔。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BOKUSAIQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值