/*
结构体的嵌套:
结构体定义中,结构体的成员又是另外一个结构体变量
结构体的嵌套的注意事项:
1)结构体定义中可以嵌套其他结构体类型的变量
不可以嵌套自己这个类型的变量
struct Date{
int month;
int year;
int day;
};
struct Student {
char *name;
int age;
float score;
struct Student stu; //错误的
}
2)可以嵌套自己类型的指针
*/
#include <stdio.h>
//定义了一个时间的结构体
struct Time{
int hour;
int min;
int sec;
};
//定义一个Date的结构体
struct Date{
int year;
int month;
int day;
//嵌套Time的结构体
struct Time time;
};
//定义了一个学生的结构体
struct Student {
char *name;
int age;
float score;
struct Date birthday;
//struct Student stu; //错误的
//struct Student *stu; //正确的
};
int main(int argc, const char * argv[]) {
//1、嵌套的结构体如何进行初始化
struct Student stu1={"张三丰",28,59.99f,{1200,2,14,{12,12,12}}}; //定义了一个结构体变量
//2、嵌套的结构体如何进行访问
printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d),成绩:%.2f
",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day,stu1.score);
//访问时间
printf("姓名:%s,年龄:%d(生日:%d-%02d-%02d %02d:%02d:%02d),成绩:%.2f
",stu1.name,stu1.age,stu1.birthday.year,stu1.birthday.month,stu1.birthday.day,stu1.birthday.time.hour,stu1.birthday.time.min,stu1.birthday.time.sec,stu1.score);
//3、结构体嵌套自身的指针
struct Person {
char *name;
int age;
//嵌套自己类型的指针
struct Person *child;
};
//结构体嵌套自身指针的,初始化
//定义kim
struct Person kim={"kim",8,NULL};
//struct Person *child = &kim;
struct Person p1={"林志颖",38,&kim};
//结构体嵌套自身指针的,访问
printf("%s 的儿子是:%s,儿子的年龄:%d
",p1.name,p1.child->name,p1.child->age);
return 0;
}
//
// main.c
// 08-结构体变量及成员作为函数参数
//
// Created by apple on 15/1/11.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
struct Car{
int lunzi;
int speed;
};
void xiuche(int n){
n = 2;
}
//用结构体变量作为函数的参数
void xiuche1(struct Car c1){
c1.lunzi = 2;
}
int main(int argc, const char * argv[]) {
//定义一个结构体变量
struct Car car1={4,200};
//car1.lunzi 结构体变量成员值 4
//1、用结构体变量的成员值作为函数的参数,实质是值传递
xiuche(car1.lunzi);
//2、用结构体变量作为函数的参数
//实质上还是值传递
xiuche1(car1);
printf("%d
",car1.lunzi); //4
return 0;
}
//
// main.c
// 09-结构指针作为函数的参数
//
// Created by apple on 15/1/11.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
struct Car{
int lunzi;
int speed;
};
/**
* 结构体指针作为函数的参数
*
* @param c1 是一个结构体指针
*/
void xiuche2(struct Car *c1){
c1->lunzi = 2;
}
int main(int argc, const char * argv[]) {
//定义一个结构体变量
struct Car car1={4,200};
//注意:用结构体变量的地址传递给函数
// 也可以理解为用结构体指针作为函数的参数
// 实质:是地址传递
xiuche2(&car1);
printf("%d
",car1.lunzi); //2
return 0;
}