C语言 结构体(嵌套结构体--结构体数组)
//结构体--嵌套结构体和结构体数组 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _parent{ int num; char name[30]; //结构体内部定义结构体,如果不定义嵌套结构体变量,那么该嵌套结构体的属性则会被当作父结构体的属性 struct son{ int age; char sname[30]; }; }Parent; typedef struct _parent2{ int num; char name[30]; //结构体内部定义结构体,如果定义嵌套结构体变量,那么该嵌套结构体的属性无法被父结构体调用 //但是父结构体可以调用嵌套结构体变量 struct son2{ int age; char sname[30]; }s1; }Parent2; struct parent3{ int num; char name[30]; }parr2[2] = { { 5, "父亲5" }, { 6, "父亲6" } };//结构体数组定义初始化二 void main() { /* 嵌套结构体 */ Parent p1; p1.num = 1; sprintf(p1.name, "父亲"); p1.age = 12; 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 = 2; sprintf(p2.name, "父亲2"); p2.s1.age = 13; 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[2] = { { 3, "父亲3", 12, "儿子3" }, {4,"父亲4",15,"儿子4"} };//结构体数组定义初始化一 //Parent2 pa1, pa2; //Parent2 ptd[2] = { pa1, pa2 }; /* 报错: error C2440 : “初始化” : 无法从“Parent2”转换为“int” rror C2440 : “初始化” : 无法从“Parent2”转换为“char” */ //不存在这种结构体初始化方式,C语言编译器将pa1当作第一个结构体元素的第一个参数, //pa2当作第一个结构体元素的第二个参数 //所以报错 Parent2 ptdd[2]; //memset(ptdd, 0, sizeof(ptdd)); memset(&ptdd, 0, sizeof(ptdd)); //两种初始化都正确,推荐使用第二种,因为第二种更加符合memset函数的用法,第二种的指针是指向数组的指针,第一种的指针是指向数组第一个元素的指针
//这里使用memset()的目的是初始化整个数组,所以第二个比较符合。
system("pause"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫