C语言结构体的使用说明
结构体是用来创建用户自己的数据类型的一种方式,类似于现在比较流行的面向对象思想中的类。在C语言中结构体声明的位置确定了它的使用范围,如果一个结构体声明在一个函数中,那么他只能在这个函数内部使用,这样我们定义结构体的用处不是很大,所以一一般把结构体定义在程序的最上面
#include<stdio.h>
//声明一个日期类型的结构体
struct Date{
int year;
char *day;
int month;
};
int main(int argc,char const *argv[])
{
struct Date today;
today.month=12;
today.year=2019;
today.day="Saturday";
printf("%d-%d-%s",today.year,today.month,today.day);
}
声明结构的三种形式:
//第一种形式(比较常见):
struct point
{
int x;
int y;
}
struct point p1,p2;
//第二种形式(比较少见)
struct
{
int x;
int y;
} p1,p2;
//第三种形式(很常见)
struct point
{
int x;
int y;
} p1,p2;
结构的初始化
struct point
{
int x;
int y;
};
//第一种初始化方法,直接用花括号赋值
struct point p1={1,2};
//第二种
struct point p2;
p2.x=1;
p2.y=2;
//第三种
struct point p3={.x=1,.y=2};
结构的运算
- 要访问整个结构,直接用结构变量的名字
- 对于整个结构,可以做赋值,取地址,也可以作为函数参数传递
p1=(struct point){3,4};//相当于p1.x=3;p1.y=4;
- p1=p2;//相当于p1.x=p2.x;p1.y=p2.y;
结构体在函数之间传值
#include<stdio.h>
struct point
{
int x;
int y;
};
struct point GetPoint(struct point p);
int main(int argc,char const *argv[])
{
struct point p1;
struct point newPoint={1,2};
p1=GetPoint(newPoint);
printf("x=%d\ty=%d",p1.x,p1.y);
return 0;
}
struct point GetPoint(struct point p)
{
struct point temp;
temp.x=p.x;
temp.y=p.y;
return temp;
}
指向结构的指针
struct date
{
int month;
int year;
int day;
} mydate;
strcut date *p=&mydate;//声明一个date类型的指针,指向结构变量mydate
//下面的两个语句是等价的,都实现了给结构变量mydate的month成员赋值的操作
(*p).month=12;
p->month=12;
- 用->符号来表示指针所指的结构变量中的成员