目录
一.结构类型
这是一个普通的结构,结构的名字叫做date。
该结构(任一一date结构的变量都包括这三个内容)包括三个内容:int类型的month, int类型的day,int类型的year。
结构体即可声明在函数内部,也可以声明在函数外。声明在函数外的可以在任何函数中使用。
注意:结构体大括号后面一定要加 ;。结构中的内容在主函数中调用时,用的就是结构中的内容名。
二.声明结构的形式
p1,p2都是point结构的变量,里面都含有x,y。
p1,p2都是无名结构的变量,里面都含有x,y。
p1,p2都是point结构的变量,里面都含有x,y。(比较常见)
三.结构的初始化
使用大括号进行初始化。结构有几个内容就输入几个值。
像这种,没有输入全值的个数,就会将使未输入值对应的内容的值=0。
四.结构访问方式
变量名称 + '.' +内容名称。
例如:p1.x, p1.y
五.结构运算
可以做赋值,取地址,也可以传递给参数。
p1 = (struct point){5,1}; //相当于x=5,y=1,将这两个值强制转换成结构类型变量并赋给p1
p1 = p2;//相当于p1.x=p2.x,p1.y=p2.y
注意:数组变量不能这么做,因为数组变量是const,初始化后不能将数组变量等于另一个变量,也不能用一个大括号给它赋值。
六.结构指针
与数组不同,结构变量的名字并不是结构的地址,取地址需要用&。
struct date *pDate = &today;
将today的地址赋给结构指针pDate。
七.结构与函数
(1)结构作为函数参数
整个结构可以作为参数的值传入函数。
这时候在函数中新建一个结构变量,并复制调用者的结构的值。
函数可以返回一个结构。
(2)输入结构
不能用scanf一次将一个结构赋值。
1.临时建立一个结构变量,把这个结构返回给调用者。
2.通过结构指针
用->表示结构指针(所指也应为结构变量)所指的结构变量中的内容。
例如:p->month表示p所指的结构变量中的myday的值。
八.结构数组
dates[100]是一个结构类型的数组,第二行的声明中要用两个大括号进行赋值。
注意:一个大括号只是一个元素中的值,例如{4,5,2005}(这三个值分别对应结构中的三个内容,在这个程序中,结构数组中的每一个单元都含有结构中的三个内容)只是dates[0]中的值。
九.结构中的结构
注意:没有rp->pt1->x这样的表达,因为pt1并不是指针。并且->后面一定是要包含外结构的内容.里结构的内容,即有几层结构镶嵌就要包含几个内容。这样的形式是一个值,若使用scanf初始化则要用&来赋值。
对于rects来说,后面的最外层的大括号表示这个数组,第二层大括号分别与结构变量p1,p2相对应,即p1,p2的值,又因为p1,p2中又是结构point的变量所以个包含两个内容,所以最后一层大括号和x,y对应。