结构类型
声明结构变量
struct data {
//结构成员
int month;
int day;
int year;
};
//或
struct point{
int x;
int y;
} p1,p2;
//只定义了两个变量
struct {
int a;
int b;
} s1,s2;
定义结构变量
struct data today;
//定义一个变量today,里面有month,year,day的值
结构计算
//数组不能做这种运算
p1 = (struct point){5,10};//相当于p1.x=5,p1.y=10
p1 = p2;//相当于p1.x=p2.x , p1.y=p2.y;
结构指针
struct data *pDate = &today
//和数组不同,结构变量的名字不是地址,必须用取地址符&
结构与函数
- 整个结构可以作为参数传入函数
- 此时在函数内部新建一个结构变量,并赋值调用者的结构的值
- 函数也可以返回一个结构
输入结构
#include<stdio.h>
//声明结构
struct point {
int x;
int y;
};
//定义函数---输入结构
void getStruct(struct point);
//输出
void outputStruct(struct point);
int main(){
// 定义一个point类型的y变量
struct point y ={0,0};
// 将y交给函数
getStruct(y);
outputStruct(y);
return 0;
}
// C语言在函数调用的时候只是传值
void getStruct(struct point p){//接收到的不是y这个结构变量,而是y这个结构变量的值
// 此时是有一个和y的结构变量相同值的另一个结构变量
scanf("%d",&p.x);
scanf("%d",&p.y);
printf("%d,%d\n",p.x,p.y);
}
void outputStruct(struct point p){
// 从始至终没有动main函数中的y
printf("%d,%d\n",p.x,p.y);
}
解决方案:
struct point inputPoint(){
// 创建一个临时结构变量
struct point temp;
scanf("%d\t",&temp.x);
scanf("%d\t",&temp.y);
return temp;
}
int main(){
struct point y ={0,0};
y = inputPoint();
outputStruct(y);
return 0;
}
指向结构的指针
- 用
->
表示指针所指的结构变量中的成员
(*p).month = 12
p->month = 12
结构中的结构
- 结构内可以定义另一个结构当变量
- 结构变量可以是数组
struct time {
int hour;
int minute;
int second;
};
struct time testTimes[5] = {
{11,25,36},{12,0,0},{52,56,25}
};
//testTimes[0].hour=11,testTimes[0].minute=25,testTimes[0].second=36
以下四种形式等价:
struct read r,*rp;
rp = &r;
r.ptl1.x
rp->ptl1.x