news 2026/5/23 1:17:15

C 语言 typedef 结构体私有化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C 语言 typedef 结构体私有化

完整可运行案例(纯 C 语言,不依赖任何库)

第一步:头文件person.h对外公开(别人能看到)

#ifndef PERSON_H #define PERSON_H // 🔥 关键:只声明,不定义!不完整类型! typedef struct _person_t person_t; // 只能通过函数创建、访问、销毁 person_t* person_create(const char* name, int age); void person_delete(person_t* p); // 对外提供访问接口(getter) const char* person_get_name(person_t* p); int person_get_age(person_t* p); #endif

第二步:源文件person.c内部实现(别人看不到)

#include <stdlib.h> #include <string.h> #include "person.h" // 🔥 真正的结构体定义 —— 对外完全隐藏!私有化! struct _person_t { char name[20]; int age; }; // 创建对象 person_t* person_create(const char* name, int age) { person_t* p = malloc(sizeof(person_t)); strncpy(p->name, name, sizeof(p->name)-1); p->age = age; return p; } // 销毁 void person_delete(person_t* p) { if(p) free(p); } // 获取名字 const char* person_get_name(person_t* p) { return p->name; } // 获取年龄 int person_get_age(person_t* p) { return p->age; }

第三步:主文件main.c你写业务的地方

#include <stdio.h> #include "person.h" int main() { // 1. 创建对象 person_t* p = person_create("小明", 20); // 2. 只能用函数访问! printf("名字:%s\n", person_get_name(p)); printf("年龄:%d\n", person_get_age(p)); // 3. 🔥 你绝对不能写下面这句!编译失败! // printf("%s", p->name); // 错误:不完整类型! person_delete(p); return 0; }

一运行你就看到结果:

名字:小明 年龄:20

如果你强行写:

p->age; p->name;

编译器直接报错:

错误:不允许使用指向不完整类型 "struct _person_t" 的指针

我用一句话告诉你原理:

person.h只告诉你:

有个person_t但不告诉你里面有什么

person.c才真正定义:

struct _person_t { char name[20]; int age; };

外部看不到 → 不能直接->

只能用我给你的函数访问 →安全、封装、私有


最终总结(你彻底懂了)

C 语言结构体私有化 = 不透明类型 = 隐藏实现

外部只能看到结构体名字,看不到成员

不能直接用->

必须用提供的函数访问

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 1:17:14

The LYCRA Company将成功完成全面财务重组

公司已为长期增长、卓越运营和以客户为中心的持续创新奠定坚实基础 将以更高的财务灵活性和大幅精简的债务结束财务重组 新控股方和董事会将全力落实公司愿景&#xff0c;推动业务迈向新高度 Bruce Rubin被任命为执行董事长&#xff0c;Dean Williams被任命为临时首席执行官 为…

作者头像 李华
网站建设 2026/5/23 1:13:08

选RFID仓储管理系统厂家别只盯着参数!老采购教你用场景思维找到真正靠谱的供应商

很多企业在选型RFID仓储管理系统时&#xff0c;第一反应是翻遍全网找“RFID智能仓储管理系统厂家有哪些”&#xff0c;然后把七八家供应商的参数表摊在桌上逐一对比。读取速度多少、识别距离多远、支持多少标签同时读取——这些指标当然重要&#xff0c;但如果你的选型逻辑仅停…

作者头像 李华
网站建设 2026/5/23 1:12:01

混杂供应链多级库存控制策略的建模与仿真优化【附仿真】

✨ 长期致力于混杂供应链、流程工业、多级库存、库存控制、混合控制策略、基于仿真的优化研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;流程工业混杂…

作者头像 李华
网站建设 2026/5/23 0:58:21

NLP之BERT预训练模型详解

摘要&#xff1a; BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是谷歌于2018年提出的革命性自然语言处理模型&#xff0c;首次将基于Transformer的双向编码器架构成功应用于预训练语言模型&#xff0c;在多项NLP基准任务上刷新了最优…

作者头像 李华