千家信息网

C语言如何隐藏结构体

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇"C语言如何隐藏结构体"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C语言如何隐
千家信息网最后更新 2026年11月04日C语言如何隐藏结构体

这篇"C语言如何隐藏结构体"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C语言如何隐藏结构体"文章吧。

C++中我们尚可用类来替代结构体,但是,C语言中是没有类的,只能用结构体,但很多时候,我们需要隐藏结构体的字段,不让外界直接访问,而是通过我们写的函数进行间接访问,这样就提高了程序的封装性。

实现方法,简单来说,就是,结构体定义时,要定义在.c文件中,然后我们自己定义一些访问结构体的函数,在.h文件中,只存放函数原型声明和对结构体的声明。

看个例子

.c文件中

//stu.c#include #include #include struct stu{  char id[10];  int score;};struct stu *new_stu(){  struct stu *s;  s = (struct stu *)malloc(sizeof(struct stu));    return s;}void set_id(struct stu *s,char *id){  strcpy(s->id,id);}char *get_id(struct stu *s){  return s->id;}

可以看到,在.c文件中,我定义了一个结构体,并且定义了一些用于操作这个结构体的函数。

在.h文件中

stu.h#ifndef STU_H#define STU_Hstruct stu;extern void set_id(struct stu *s,char *id);extern char *get_id(struct stu *s);extern struct stu *new_stu();#endif

在.h中我声明了一下结构体struct stu,并且写了函数的原型声明,供其他文件调用。

在main.c中我引用了stu.h

下面是main.c

#include #include "stu.h"int main(){  //struct stu s;  //s.score = 100;  //struct stu s = {{0}};    struct stu *s;  s = new_stu();    set_id(s, "950621");  char *id = NULL;  id = get_id(s);  printf("设置的id为:%s\n",id);  return 0;  }

可以看到,在main函数中,我先是定义了一个struct stu类型的指针,然后通过new_stu()给这个指针分配了空间,在通过另外两个函数对其进行了操作。

这里需要注意一下我注释掉的部分,说明一下:

这种情况下,不能定义struct stu类型的变量!!!

因为:

.h文件中,只是对结构体进行了声明,并没有结构体具体细节的描述,也就是在main.c中只是声明了一下struct stu,这样编译器就知道有个结构体类型叫struct stu,但是它并不知道stu的内部细节。

我们都知道,定义一个变量,编译器是要给它分配内存空间的,但是,此时编译器并不知道stu的内部细节,也就不知道stu这个结构体的变量要占多少空间,自然无法分配内存。这样在编译时期就会报错。

但是定义一个指针变量就不一样啦,不管是什么类型的指针,占据的内存空间都是4个字节,编译器只需要确定有个叫struct stu 的类型存在就好了,而.h中那个声明,就是在告诉编译器,有这么一个类型。

同时,这种情况下也不能访问结构体的字段,比如,s->score=100;这条语句在编译时就会报错,原因和上面一样,编译器并不知道struct stu结构体的内部细节。

通过上面的方法,在除了stu.c文件之外的其他文件中,只能通过stu.c中定义的函数来间接操作结构体变量,而不能直接对结构体变量进行操作,包括不能创建一个结构体变量!

这样就很好地体现了程序的封装性,也提高了程序的安全性。但是就需要我们写很多操作函数啦,包括创建结构体指针变量分配空间的函数。

我们也可以在.h文件中用typedef声明一个结构体的指针类型,如 typedef struct sut * pStu;

以上就是关于"C语言如何隐藏结构体"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

结构 函数 文件 变量 编译 类型 指针 编译器 内容 空间 语言 细节 分配 内存 就是 程序 原型 只是 字段 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技学校 科技互联网龙头 金融科技还是互联网 互联网科技开发公司 科技服务与互联网 互联网科技英文 善班互联网科技 天扬科技互联网广告 互联网 科技服务平台 农村开互联网科技讲堂 互联网科技热点资讯 新兴科技互联网创新大赛颁奖典礼 互联网科技与大数据专业 特约风豹互联网科技为什么扣费 徐州市互联网科技有限公司 每天都有哪些好的互联网科技 抖集互联网科技技术咨询 互联网金融运营模式中的金融科技 中国互联网公司的科技投入 绵阳真晨互联网科技有限公司 手冲咖啡和咖啡机区别 广州大一互联网络科技有限公司 互联网科技媒体 互联网实体化科技化 深圳前海聚择互联网科技有限公司 阿里互联网科技公司 链环科技传统企业怎么转型互联网 梅州GM互联网络科技有限公司 普陀区互联网教育科技管理办法 互联网高科技绘画
0