------ 知之博客 期待与您交流! -------
一 结构体的概念
结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。
二 结构体的定义
1.结构体定义的格式
struct 结构体名{
成员列表;
}; //注意此处的分号不能省
比如要定义一个汽车的结构体
struct Car{
char *color;
int lunzi;
int speed;
};
定义一个iPhone的结构体
struct iPhone{
char *color;
float screenSize;
int sn;
int imei;
};
定义一个学生的结构体
struct Student{
char name[20];
char sex;
int age;
float score;
int sno;
};
2.结构体定义的三种方法
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>
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;
}
四 结构体成员变量的初始化
1. 先定义结构体变量,然后再初始化
2.定义结构体变量的同时,进行初始化
3.定义结构体的同时,还可以指定元素的初始化
例如:
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
struct Student{
//学生学号
int sno;
//学生姓名
char name[21];
//学生年龄
int age;
//学生成绩
float score;
};
//<span style="color:#336666;"><strong>1.先定义结构体变量,然后再初始化</strong></span>
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"; //
//<strong><span style="color:#336666;">2、定义结构体变量的同时,进行初始化</span></strong>
//初始化值得顺序要和定义结构体的顺序一致
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);
//<span style="color:#336666;"><strong>3、定义结构体的同时,还可以指定元素的初始化</strong></span>
struct Student stu3={.name = "lady Gaga"};
return 0;
}
五 结构体变量占用存储空间大小
#include <stdio.h>
int main(int argc, const char * argv[]) {
//<span style="color:#339999;"><strong>计算结构体变量在内存中占用的字节数的方法</strong></span>
//<span style="color:#339999;">1)先找对齐模数</span>
// <span style="color:#339999;">对齐模数 是结构体中的基本数据类型中占用字节数最大的那个</span>
// <span style="color:#006600;">4</span>
//<span style="color:#339999;">2)在计算结构体变量的中各个成员占用的字节和</span>
struct A{
char ch[13];
char ch1[11];
int a;
};
//定义结构体变量
struct A a1;
printf("%ld\n",sizeof(a1));
return 0;
}
六 结构体与指针的联系
首先定义一个结构体类型,然后定义这种类型的变量和指针:
struct unit {
char c;
int num;
};
struct unit u;
struct unit *p = &u;
要通过指针p
访问结构体成员可以写成(*p).c
和(*p).num
,为了书写方便,C语言提供了->
运算符,也可以写成p->c
和p->num
。
想要了解更多指针的内容,请查看文章《黑马程序员—iOS基础(c)—指针》