0039 结构体
/*
结构体变量有定义有三种方法
1)先定义结构体,然后在定义结构体变量
struct Student{
//学生学号
int sno;
//学生姓名
char name[21];
//学生年龄
int age;
//学生成绩
float score;
};
//注意:
1)结构体定义完成以后,计算机并不会给结构体分配内存空间
2)会在定义结构体变量后,分配存储空间
//结构体变量定义格式:
struct 结构体名 结构体变量名;
struct Student stu1; //这句话表示定义一个Student结构体类型的变量,变量的名称是stu1;
//stu1因为是Student类型,stu1可以存放学生的学号、姓名、年龄、成绩
struct Student stu4,stu2,stu3; //定义多个结构体变量
2)定义结构体的同时,定义结构体变量
格式:
struct 结构体名{
}结构体变量1,结构体变量2....;
struct Student{
//学生学号
int sno;
//学生姓名
char name[21];
//学生年龄
int age;
//学生成绩
float score;
}stu5,stu6,stu7; //也是用Student结构体定义了三个结构体变量
//名称分别为 stu5,stu6,stu7
3)使用匿名结构体定义结构体变量
struct {
}结构体变量1,结构体变量2....;
struct {
char *color;
int lunzi;
int speed;
}car1,car2,car3;
*/
#include <stdio.h>
struct Student{
//学生学号
int sno;
//学生姓名
char name[21];
//学生年龄
int age;
//学生成绩
float score;
};
int main(int argc, const char * argv[]) {
//第一种方法
struct Student stu1; //这句话表示定义一个Student结构体类型的变量,变量的名称是stu1;
//第二种,定义结构体的同时,定义结构体变量
struct Student{
//学生学号
int sno;
//学生姓名
char name[21];
//学生年龄
int age;
//学生成绩
float score;
}stu5,stu6,stu7; //也是用Student结构体定义了三个结构体变量
//名称分别为 stu5,stu6,stu7
struct {
char *color;
int lunzi;
int speed;
}car1,car2,car3;
return 0;
}
//
// main.c
// 15-结构体变量中成员的访问方法
//
// Created by apple on 15/1/9.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义一个Car类型的结构体
struct Car{
char *pp;
int lunzi;
int speed;
};
//用结构体类型,定义结构体变量
struct Car car1;
/*
car1
pp "奥拓"
lunzi 4
speed 350
car2
pp "时风"
lunzi 3
speed 180
*/
//获取结构体变量中的成员
// 获取品牌 car1.pp
// 获取轮子 car1.lunzi
// 获取速度 car1.speed
//访问时风 car2.pp
return 0;
}
//
// main.c
// 16-结构体变量的初始化
//
// Created by apple on 15/1/9.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
struct Student{
//学生学号
int sno;
//学生姓名
char name[21];
//学生年龄
int age;
//学生成绩
float score;
};
//先定义结构体变量,然后再初始化
struct Student stu1; //占用字节数?
//给结构体变变量初始化
stu1.sno = 38;
stu1.age = 18;
stu1.score = 59.99f;
char name1[21]="张三丰";
//name1 = "张无忌";
strcpy(stu1.name, "张三丰a");
printf("学号:%d\n年龄:%d\n分数:%.2f\n姓名:%s\n",stu1.sno,stu1.age,stu1.score,stu1.name);
//1、stu1.name 占用多个字节 21
printf("stu1.name %ld\n",sizeof(stu1.name));
//2、stu1.name 字符串长度是多少
//汉字的编码问题
// UTF-8 xcode中默认的中文的编码是utf-8格式
// 国际通用编码 一个汉字占用 3个字节
// GB2312 GBK 国标 一个汉字占用2个字节
printf("stu1.name 长度:%ld\n",strlen(stu1.name));
//stu1.name = "zbz"; //
//2、定义结构体变量的同时,进行初始化
//初始化值得顺序要和定义结构体的顺序一致
struct Student stu2={8,"凤姐",18,49.99f};
printf("\n\n学号:%d\n年龄:%d\n分数:%.2f\n姓名:%s\n",stu2.sno,stu2.age,stu2.score,stu2.name);
//3、定义结构体的同时,还可以指定元素的初始化
struct Student stu3={.name = "lady Gaga"};
return 0;
}
//
// main.c
// 18、结构体变量占用存储空间大小
//
// Created by apple on 15/1/9.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
//计算结构体变量在内存中占用的字节数的方法
//1)先找对齐模数
// 对齐模数 是结构体中的基本数据类型中占用字节数最大的那个
// 4
//2)在计算结构体变量的中各个成员占用的字节和
struct A{
char ch[13];
char ch1[11];
int a;
};
//定义结构体变量
struct A a1;
printf("%ld\n",sizeof(a1));
return 0;
}
//
// main.c
// 19-结构体作用域
//
// Created by apple on 15/1/9.
// Copyright (c) 2015年 itcast. All rights reserved.
//
#include <stdio.h>
//定义一个全局的结构体
struct Person{
int age;
char *name;
};
int main(int argc, const char * argv[]) {
//定义结构体变量
struct Person p1={18,"胡一刀"};
//此处是可以的
char *str ="aa";
str="bbb";
p1.name = "苗人凤";
printf("age = %d\nname = %s\n",p1.age,p1.name);
{
//定义一个结构体
//定义局部的结构体,这个结构体和全局的结构体同名
struct Person{
int age;
};
}
//此处定义的p2 是局部结构体Person的类型
struct Person p2;
p2.name = "户外i";
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!