Autoleaders控制组李鋆——结构 学习笔记

这篇博客详细介绍了C语言中的结构体类型声明、初始化、成员访问以及结构体在函数中的应用。通过实例展示了如何声明和使用结构体,包括作为函数参数、通过指针传递以及结构体数组的操作。此外,还讲解了嵌套结构和结构中的结构数组的使用方法。
摘要由CSDN通过智能技术生成

一.11.2-1 结构类型

1.声明结构

  • 结构体要写成这个样子呐
struct date
{int month;
 int day;
 int year;
};

//新手常常忘记最后的这个分号//

  • 根本地变量一样,在函数内部声明的结构类型只能在函数的内部使用
  • 所以我们常常在外部声明结构类型
    像是下面这个样子
#include <stdio.h>
struct date
{int month;
 int day;
 int year;
};
//这里的结构类型就没有再main函数里面声明,在任意的地方都可以进行//
int main(int argc, char const*argv[])
{
	struct date today;
	today.month=07;
	today.day=31;
	today.year=2022;
	printf("Today's date is %i-%i-%i.\n",
	today.year,today.month,today.day);
	return 0;
 } 

2.声明结构的形式

  • 最常用的是以下结构声明形式
struct point {
 	int x;
 	int y;
 	
 } p1,p2;
 //p1跟p2都是point里面有x和y的值t//
 

3.结构的初始化

可以这样
struct date today={07,31,2022};
也可以这样
struct date thismonth={.month=7,.year=2022,day=31};

4.结构成员

结构用.运算符和名字访问其成员
像是

  • today.day
  • student.first name
  • p1.x
  • p2.y

5.结构运算

  • 要访问整个结构的话,直接用结构的名字就好了

  • 对于整个结构,可以赋值 取地址,也可以传递给函数参数

    像是
    p1=(struct point){5,10};//相当于pl.x=5;
    pl.y=10;
    

二.11.2-2 结构与函数

1.结构作为函数参数

int numberofdays(struct date d)

  • 整个结构可以作为参数的值传入函数
  • 这时候是在函数内新建一个结构变量,并赋值调用者的结构的值
  • 也可以返回一个结构

2.输入结构

  • 如果我们打算写一个函数来读入这个结构,我们要用 -> 这个运算符来进行读入
  • 但是读入的结构又要如何传回来呢?
  • 记住在C语言中函数的调用是传值的
//可以尝试用以下代码来进行函数中结构的输入/
#include <stdio.h>
struct point {int x; int y;
};
void getstruct(struct point );
void output(struct point );
void main()
{
	struct point y={0,0};
	getstruct(y);
	output(y);
	
}
void getstruct(struct point p)
{
	scanf("%d",&p.x);
	scanf("%d",&p.y);
	printf("%d %d",p.x,p.y);
	
}
void output(struct point p)
{
	scanf("%d",&p.x);
	scanf("%d",&p.y);
	printf("%d %d",p.x,p.y);
}

3.结构指针作为参数

在进行结构的传输时更好的方式是利用指针传输而不是将整个结构进行传输

4.指向结构的指针

  • 用-》表示指针所指向的结构变量中的成员
//就像是下面这样//
struct date{int day ;int month ;int year;
}myday;
struct date *p=&myday;
(*p).month=12;
p->month=12;

三.11.2-3 结构中的结构

1.结构数组

形如

struct date dates[100];
struct date dates[]={
	{4,5,2022
	},
	{2,4,2055
	}
};


2.结构中的结构

像是

struct dateandtimee{
	struct daate sdate;
	struct time stime;
};

3.嵌套的结构

像是这样

struct point {
	int x;
	int y;
};
struct rectangle{
	struct point pt1;
	struct point pt2;
};

4.结构中的结构的数组

这样子对数组进遍历,多是一件美式

#include <stdio.h>
struct point{
	int x;
	int y;
};
struct rectangle{
	struct pint pl;
	struct point p2;
};
void printrect(struct rectangle r)
{
	printf("<%d,%d>to<%d,%d>\n",r.pl.x,r.pl.y,,r.p2xr.p2.y);
	
}
int main (int argc,char const*argv[])
{
	int i;
	struct rectangle rects[]={{{1,2
	},{3,3}
	},{{5,6},
	{7,8
	}}
	};
	for (i=0;i<2;i++)
	printfrecct(rects[i]);
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值