1.定义
#include <stdio.h>
struct date{
int month;//三个成员变量
int day;
int year;
};//这个地方有分号!!!因为一个结构体是一个语句
/*
放在所有函数的外面,可以到处使用
*/
int main()
{
struct date today;//变量类型是struct date
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;
}
附:声明结构的形式
第一种
#include <stdio.h>
struct point{int x;int y;};
int main()
{
struct point p1,p2;
}
p1和p2都是point型,里面有x和y的值
第二种
#include <stdio.h>
struct point{int x;int y;} p1,p2;
int main()
{
}
p1和p2都是point型,里面有x和y的值
2.初始化
#include <stdio.h>
struct date{
int month;
int day;
int year;
};
int main()
{
struct date today={07,31,2014};//老老实实依次赋初值
struct date thismonth={.month=7,.year=2014};//指定某个变量的值
printf("Today's date is %i-%i-%i.\n",
today.year,today.month,today.day);//2014-7-31
printf("This month is %i-%i-%i.\n",
thismonth.year,thismonth.month,thismonth.day);//2014-7-0
return 0;
}
//在Dev C++中 无法编译这个代码
3.成员
结构和数组有点像
数组用[]运算符和下标访问其成员
a[0]=10;
结构用 . 运算符和名字访问其成员
today.day
student.firstName
p1.x
p1.y
要访问整个结构,直接用结构变量的名字
对于整个结构,可以做赋值、取地址、也可以传递给函数参数
p1=(struct point){5,10};相当于p1.x=5;p1.y=10;
p1=p2;相当于p1.x=p2.x; p1.y=p2.y;
#include <stdio.h>
struct date{
int month;int day;int year;
};
int main()
{
struct date today;
today=(struct date){07,31,2014};
struct date day;
day=today;
day.year=2015;
printf("Today's date is %i-%i-%i.\n",
today.year,today.month,today.day);
printf("The day's date is %i-%i-%i.\n",
day.year,day.month,day.day);
return 0;
}
4.指针
和数组不同,结构变量的名字并不是结构变量的地址,
必须使用&运算符
struct date *pDate=&today;
#include <stdio.h>
struct date{
int month;int day;int year;
};
int main()
{
struct date today;
today=(struct date){07,31,2014};
struct date day;
struct date *pDate=&today;
printf("Today's date is %i-%i-%i.\n",
today.year,today.month,today.day);
printf("The day's date is %i-%i-%i.\n",
day.year,day.month,day.day);
printf("address of today is %p\n",pDate);//输出地址
return 0;
}