//结构体定义
struct student
{
char name[20];
char sex[10];
int age;
float hight;
char hoby[100];
};
//初始化方式一
struct student st_stu = {
.name= "alex";
.sex = "man";
.age = 18;
.hight = 180.0;
.hoby = "play、music、eat、play games";
};
//初始化方式二
struct student st_stu;
sprintf(st_stu.name,"%s","alex");
sprintf(st_stu.sex,"%s","women");
st_stu.age = 18;
st_stu.hight = 180.0;
sprintf(st_stu.hoby,"%s","play、music、eat、play games");
//初始化方式三
struct student st_stu;
st_stu.name[0] = "a";
st_stu.name[1] = "l";
st_stu.name[2] = "e";
st_stu.name[3] = "x";
st_stu.sex[0] = "m";
st_stu.sex[1] = "a";
st_stu.sex[2] = "n";
st_stu.age = 18;
st_stu.hight = 180.0;
sprintf(st_stu.hoby,"%s","play、music、eat、play games");
//指针初始化方式
struct student *st_stu = malloc(sizeof(struct student));
sprintf(st_stu -> name,"%s","alex");
sprintf(st_stu -> sex,"%s","women");
st_stu -> age = 18;
st_stu -> hight = 180.0;
sprintf(st_stu -> hoby,"%s","play、music、eat、play games");
2.第二种初始化定义方式
//结构体定义
struct student
{
char name[20];
char sex[10];
int age;
float hight;
char hoby[100];
}second,*p ;
这里的 second 等同于 struct student second,只不过是定义结构体时把已经确定的结构体变量直接定义了。
//初始化方式一
//truct student *st_stu;
sprintf(second.name,"%s","alex");
sprintf(second.sex,"%s","women");
second.age = 18;
second.hight = 180.0;
sprintf(second.hoby,"%s","play、music、eat、play games");
//初始化方式二
//truct student *st_stu;
second.name[0] = "a";
second.name[1] = "l";
second.name[2] = "e";
second.name[3] = "x";
secondu.sex[0] = "m";
second.sex[1] = "a";
second.sex[2] = "n";
second.age = 18;
second.hight = 180.0;
//指针初始化方式
//truct student *st_stu;
p = malloc(sizeof(struct student));
sprintf(p -> name,"%s","alex");
sprintf(p -> sex,"%s","women");
p -> age = 18;
p -> hight = 180.0;
sprintf(p -> hoby,"%s","play、music、eat、play games");
//结构体定义
typedef struct student
{
char name[20];
char sex[10];
int age;
float hight;
char hoby[100];
}second3;
typedef 作用是给 “struct student” 起个别名,方便使用和牢记,second3 等同于 struct student ,意味着可以直接使用second3 定义一个新的结构体对象。使用如下:
//初始化方式一
second3 st_stu = {
.name= "alex";
.sex = "man";
.age = 18;
.hight = 180.0;
.hoby = "play、music、eat、play games";
};
//初始化方式二
second3 st_stu;
sprintf(st_stu.name,"%s","alex");
sprintf(st_stu.sex,"%s","women");
st_stu.age = 18;
st_stu.hight = 180.0;
sprintf(st_stu.hoby,"%s","play、music、eat、play games");
//初始化方式三
second3 st_stu;
st_stu.name[0] = "a";
st_stu.name[1] = "l";
st_stu.name[2] = "e";
st_stu.name[3] = "x";
st_stu.sex[0] = "m";
st_stu.sex[1] = "a";
st_stu.sex[2] = "n";
st_stu.age = 18;
st_stu.hight = 180.0;
sprintf(st_stu.hoby,"%s","play、music、eat、play games");
//指针初始化方式
second3 *st_stu = malloc(sizeof(struct student));
sprintf(st_stu -> name,"%s","alex");
sprintf(st_stu -> sex,"%s","women");
st_stu -> age = 18;
st_stu -> hight = 180.0;
sprintf(st_stu -> hoby,"%s","play、music、eat、play games");
除了可以定义普通结构变量,还可以定义指针;
//结构体定义
typedef struct student
{
char name[20];
char sex[10];
int age;
float hight;
char hoby[100];
}second3,*p;
//初始化
p st_stu = malloc(sizeof(struct student));
sprintf(st_stu -> name,"%s","alex");
sprintf(st_stu -> sex,"%s","women");
st_stu -> age = 18;
st_stu -> hight = 180.0;
sprintf(st_stu -> hoby,"%s","play、music、eat、play games");
1.知识点一
struct
{
char name[20];
char sex[10];
int age;
float hight;
char hoby[100];
}Initialization_one,Initialization_two;
这种省略了struct 后面 的结构体参数,表示不能再定义新的结构体内容,只能使用 Initialization_one和Initialization_two这两个内容。(struct new;错误写法)。
2.知识点二
typedef struct
{
char name[20];
char sex[10];
int age;
float hight;
char hoby[100];
}Initialization;
这种起了别名,缺省了结构参数,表达的意思也是不能再通过struct来定义新的内容,但是它和知识点一的区别是,它可以通过别名来定义 新的内容-----》Initialization student_1;Initialization student_2;Initialization student_n ;好比生活给你关上了一扇窗,又给你打开了一扇窗,相当于没关…。
3.知识点三:结构体的兄弟–>共同体
定义:
typedef union u_strusct
{
int age ;
double height;
char bit;
}u_struct;
它只有一个有效数据,每初始化一个变量都会对前面定义过的变量进行覆盖,我们直接看下面的代码:
int main(int argc, char const *argv[])
{
u_struct u_test ={
.age = 90,
.height = 34.6,
.bit = 'a'
};
/*-----只有一个有效数据,最后赋值那个会把前面的覆盖掉--------*/
printf("u_test.age :%d\n", u_test.age );//乱码
printf("u_test.height :%f\n", u_test.height );//乱码
printf("u_test.bit :%d\n", u_test.bit );//97,
printf("u_test.bit :%c\n", u_test.bit );//a
/*---------共同体指针-------------*/
u_struct *p = &u_test;
printf("%c\n", p->bit);//a
printf("%f\n", p->height);//乱码
printf("%d\n", p->age);//乱码
return 0;
}
从上面的输出结果,我们可以发现除了bit输出了预期正确结果,其他的输出都是乱码,或者不是我们初始化的值。原因在于bit是最后初始化的,每 初始化一个新变量,前面的都会被覆盖掉。
到此,我们的讲解就结束,希望这些知识点能对你们有所帮助。