struct 结构体

  1. struct 结构体
    struct Student{ //声明结构体
    char name[20]; //姓名
    int num; //学号
    float score; //成绩
    };
    要定义结构变量,则一般形式是:
    struct 结构体名 结构体变量名;
    如:
    struct Student stu1; //定义结构体变量

1)、结构体变量的定义可以放在结构体的声明之后:
struct Student{ //声明结构体
char name[20]; //姓名
int num; //学号
float score; //成绩
};
struct Student stu1; //定义结构体变量

2)、结构体变量的定义也可以与结构体的声明同时,这样就简化了代码:
struct Student{
char name[20];
int num;
float score;
}stu1; //在定义之后跟变量名

3)、还可以使用匿名结构体来定义结构体变量:
struct { //没有结构名
char name[20];
int num;
float score;
}stu1;
2.访问结构体成员
struct Birthday{ //声明结构体 Birthday
int year;
int month;
int day;
};
struct Student{ //声明结构体 Student
char name[20];
int num;
float score;
struct Birthday birthday; //生日
}stu1;

则用 stu1.birthday.year 访问出生的年份。
1)、结构体变量的初始化可以放在定义之后:
可以对结构体的成员逐个赋值:
struct Student stu1, stu2; //定义结构体变量
strcpy(stu1.name, “Jack”);
stu1.num = 18;
stu1.score = 90.5;

注意:不能直接给数组名赋值,因为数组名是一个常量。如:
stu1.name = “Jack”; //…main.c:26:15: Array type ‘char [20]’ is not assignable

或者可以对结构体进行整体赋值:
stu2 = (struct Student){
“Tom”, 15, 88.0};

2)、结构体变量的初始化也可以与定义同时:
struct Student{ //声明结构体 Student
char name[20];
int num;
float score;
}stu = {
“Mike”, 15, 91}; //注意初始化值的类型和顺序要与结构体声明时成员的类型和顺序一致
此时不需要强制类型转换
也可以部分初始化:
struct Student stu4 = {.name = “Lisa”};

?1
也可以按照任意的顺序使用指定初始化项目:
struct Student st = { .name = “Smith”,
.score = 90.5,
.num = 18 };

3)、可以用一个已经存在的结构体去初始化一个新的相同类型的结构体变量,是整体的拷贝(每一个成员都一一赋值给新的结构体变量),而不是地址赋值。如:
stu3 = stu1;
printf(“stu1 addr: %p\nstu3 addr: %p\n”, &stu1, &stu3);
printf(“stu1.num: %d\nstu3.num: %d\n”, stu1.num, stu3.num);
printf(“stu1.num addr: %p\nstu3.num addr: %p\n”, &stu1.num, &stu3.num);
//输出结果:
stu1 addr: 0x10000104c
stu3 addr: 0x100001084
stu1.num: 18
stu3.num: 18
stu1.num addr: 0x100001060
stu3.num addr: 0x100001098

  1. typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。
  2. strcpy C 库函数?char *strcpy(char *dest, const char *src)?把?src?所指向的字符串复制到?dest。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值