C语言学习笔记(浙大翁恺版)第十一周 结构(2)

目录

11.2.1 结构类型

声明结构的形式

结构变量初始化

结构成员

结构运算

结构指针

11.2.2 结构与函数

输入结构

解决方法(一):临时变量

解决方法(二):结构指针作为参数​​​​​​​

11.2.3 结构中的结构

结构数组

结构中的结构

嵌套的结构(以两个对角点确定的矩形)

结构中的结构的数组 


11.2.1 结构类型

想记录抽象物体的一连串数据,我们不想一个一个定义,此时就可以用到C语言的结构类型

一个结构就是一个复合类型,其中可以包含许多不同类型的成员变量

#include ‹stdio.h>
int main(int arg, char const *argv(])
{
struct date {
int month;
int day;
int year;
};

struct date today;
//使用结构类型,建立了today结构变量

today.month = 07;
today. day = 31;
today. year = 2014;

printf ("Today's date is %i-i-%i.\n"
today. year, today.month, today. day|
return 0;
}
  • 和本地变量一样,在函数内部声明的结构类型只能在函数内部使用,但如果在外部声明就可以被多个函数使用了。所以通常将结构声明的部分放在所有函数的外面
  • 和之前的枚举相似,使用时候需要带上struct关键字

声明结构的形式

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

//声明了一个结构名为point,创建了两个变量p1和p2
struct {
int x;
int y;
}p1,p2;

//声明了一个结构但没有名字,创建了两个变量p1和p2
//p1和p2都是无名结构,有x和y值
//当你只需要在当下使用两个变量,可以用这种不起名字的方式

第三种是更加常见的做法

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

//声明了一个结构名为point,创建了两个变量p1和p2
//p1和p2都是point,内部有x和y的值

示例:

struct date today;

today.month=06;

today.day=19;

today.year=2005;

于是today这个变量中就有三个int类型。函数外声明的部分是在声明一种新类型,而函数内是在定义这种类型的变量。声明后就可以按模板创建多个不同变量,内部含有day、year等等。

结构变量初始化

我们创建一个结构变量之后,它在函数内部,是一个本地变量,没有初始值。因为有前车之鉴,不赋初始值就会给予乱七八糟的内存值。那如何给它赋初值呢?

struct date{
    int month;
    int day;
    int year;  
};

int main()
{
    struct date today = {07,31,2014};
//一种就是按声明的顺序依次赋值
    struct date thismonth = {.month=7, .year=2014 };
    //类似数组,没给day赋值,自动赋0
//另一种是用点运算符来特定赋值
}

结构成员

  • 结构成员与数组成员类似,但数组成员类型必须相同,结构成员则不需要
  • 成员访问方式不同,数组通过方括号[]和下标(方括号里的数字),而结构通过点(.)和名字来访问
    • eg:a[0]=10;
    • today.day\p1.x

结构运算

  • 要访问整个结构,直接用结构变量的名字
  • 整个结构可以做赋值、取地址,也可以传递给函数参数
  • p1=(struct point){5,10};
        //(struct point 是强制类型转换,将5,10强制转换为point结构变量)
    //相当于p1.x=5, p1.y=10
    
    p1=p2;
    //相当于p1.x = p2.x, p1.y = p2.y
  • (以上的两种操作,数组都是不能完成的)
#include
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值