结构体声明、初始化等基础使用方法

        一个结构就是一个复合的数据类型,其中可以有各种类型的它的成员,用一个变量来表达这些数据。

        结构体和本地变量一样,在函数内部声明的结构类型只能在函数内部使用,所以通常在函数外部声明结构类型,这样就可以被多个函数所使用了。

目录

声明结构的形式:

结构的初始化:

结构运算:

结构作为函数参数:

指向结构的指针:

结构数组: 

结构中的结构 :

自定义数据类型(typedef):


声明结构的形式:

struct point{
	int x;
	int y;
};//注意分号。

struct point p1,p2;

        这个代码中,struct point 是一种结构类型,point是这个结构的名字 p1,p2是结构声明的变量,也就是所声明变量的名字是p1,p2,每一个变量中都包含x和y两个整形变量。

第二种声明方式:

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

//这是一个无名结构;
//p1,p2是变量的名字,并不是结构类型的名字。

第三种声明方式:

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

//声明了一个结构,这个结构的名字是point,并同时定义了两个变量:p1,p2。

结构的初始化:

  • 结构用.(点)运算符和名字访问其成员,结构名称.变量名称

today.day;   

p1.x ; 

p2.y; 

#include <stdio.h>
struct date{
	int month;
	int day;
	int year;
};

int main()
{
	struct date today = {11,14,2021};
    //按顺序给变量初始化,11给month,14给day,2021给year;

	struct date thismonth = {.month=7,.year=2014};
    //具体指明将值给哪一个变量赋值,未指明的变量会被赋值为0,可以运行代码尝试。

	printf("Today's date is %i-%i-%i.\n",
		today.year, today.month, today.day);
	printf("This month is %i-%i-%i.\n",
		thismonth.year, thismonth.month, thismonth.day);
		
	return 0;
}

结构运算:

  • 要访问整个结构,直接用结构变量的名字。
  • 对于整个结构,可以做赋值、取地址,也可以传递给函数参数。

p1 = (struct point){5,10};

赋值运算,强制类型转换,相当于p1.x = 5; p1.y = 10;

p1 = p2;

相当于p1.x = p2.x; p1.y = p2.y;


结构作为函数参数:

int Days ( struct date d )

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

指向结构的指针:

  和数组不同,结构变量的名字不是结构变量的地址,必须用&运算符。

struct date *p= &myday;

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

struct date *p = &myday;//初始化一个结构指针。

(*p).month = 12;
p->month = 12;

用->表示指针所指的结构变量中的成员。


结构数组: 

struct date dates[100];
struct date dates[] = 
{
    {7,5,2003},{9,1,2009}
}; //初始化

dates[0].month == 7;
dates[0].day ==5;
dates[0].year ==2003;

date[1]同理


结构中的结构 :

struct point{
    int x;
    int y;
};

struct rectangle{
    struct point pt1;
    struct point pt2;
};

定义一个变量 struct retangle r;

就可以得到 r.pt1.x , r.pt1.y,  r.pt2.x,  r.pt2.y


自定义数据类型(typedef):

  • C语言提供了一个叫做 typedef 的功能来声明一个已有的数据类型的新名字

 比如:typedef int Length

 使得 Length 成为 int 类型的别名。

  • 这样,Length 这个名字就可以代替int 出现在变量定义和参数声明的地方了。
  • Length a,b,len;
  • Length numbers[10];

 typedef 结构类型 变量名称

  • 最终我们可以使用变量名称去替代某种类型。

所以我们可以对长长的结构类型使用typedef .

typedef struct ADate{
	int month;
	int day;
	int year;
}Date;

Date d = {7, 5, 2003};//使用变量名称进行初始化,缩减敲代码时长。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值