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 语言结构体私有化 = 不透明类型 = 隐藏实现

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

不能直接用 ->

必须用提供的函数访问

相关推荐
vibecoding日记13 小时前
双非如何快速入职字节等大厂大模型?真实案例分析:推理优化和投机解码
算法·求职·大模型工程师
yszaygr213815 小时前
Verilog参数化游程编码RLE模块
算法
望易15 小时前
刚设计的大模型架构-双域耦合认知框架
算法·架构
复杂网络19 小时前
多个 Claude Code 与多个 Codex 协同工作:设计与实现方案
算法
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron1 天前
面试常客:字符串算法从入门到进阶
算法·面试
吴佳浩2 天前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹2 天前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
vivo互联网技术2 天前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc