C语言 结构体(嵌套结构体--结构体数组)

//结构体--嵌套结构体和结构体数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h> typedef struct _parent{
int num;
char name[];
//结构体内部定义结构体,如果不定义嵌套结构体变量,那么该嵌套结构体的属性则会被当作父结构体的属性
struct son{
int age;
char sname[];
};
}Parent; typedef struct _parent2{
int num;
char name[];
//结构体内部定义结构体,如果定义嵌套结构体变量,那么该嵌套结构体的属性无法被父结构体调用
//但是父结构体可以调用嵌套结构体变量
struct son2{
int age;
char sname[];
}s1;
}Parent2; struct parent3{
int num;
char name[];
}parr2[] = { { , "父亲5" }, { , "父亲6" } };//结构体数组定义初始化二 void main()
{
/*
嵌套结构体
*/
Parent p1;
p1.num = ;
sprintf(p1.name, "父亲");
p1.age = ;
sprintf(p1.sname,"儿子");
printf("num=%d;name=%s;age=%d;sname=%s\n",p1.num,p1.name,p1.age,p1.sname); Parent2 p2;
p2.num = ;
sprintf(p2.name, "父亲2");
p2.s1.age = ;
sprintf(p2.s1.sname, "儿子2");
printf("num=%d;name=%s;age=%d;sname=%s\n", p2.num, p2.name, p2.s1.age, p2.s1.sname); /*
结构体数组的定义
*/
Parent2 parr1[] = { { , "父亲3", , "儿子3" }, {,"父亲4",,"儿子4"} };//结构体数组定义初始化一 //Parent2 pa1, pa2;
//Parent2 ptd[2] = { pa1, pa2 };
/*
报错:
error C2440 : “初始化” : 无法从“Parent2”转换为“int”
rror C2440 : “初始化” : 无法从“Parent2”转换为“char”
*/
//不存在这种结构体初始化方式,C语言编译器将pa1当作第一个结构体元素的第一个参数,
//pa2当作第一个结构体元素的第二个参数
//所以报错
Parent2 ptdd[];
//memset(ptdd, , sizeof(ptdd));
memset(&ptdd, 0, sizeof(ptdd));
//两种初始化都正确,推荐使用第二种,因为第二种更加符合memset函数的用法,第二种的指针是指向数组的指针,第一种的指针是指向数组第一个元素的指针
//这里使用memset()的目的是初始化整个数组,所以第二个比较符合。
system("pause");
}
上一篇:Jmeter 分布式(Jmeter5.1版本)


下一篇:重写(Override)与重载(Overload)