亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言中隱藏結構體的細節

2020-01-26 14:08:17
字體:
來源:轉載
供稿:網友

我們都知道,在C語言中,結構體中的字段都是可以訪問的?;蛘哒f,在C++ 中,類和結構體的主要區別就是類中成員變量默認為private,而結構體中默認為public。結構體的這一個特性,導致結構體中封裝的數據,實際上并沒有封裝,外界都可以訪問結構體重的字段。

C++中我們尚可用類來替代結構體,但是,C語言中是沒有類的,只能用結構體,但很多時候,我們需要隱藏結構體的字段,不讓外界直接訪問,而是通過我們寫的函數進行間接訪問,這樣就提高了程序的封裝性。

實現方法,簡單來說,就是,結構體定義時,要定義在.c文件中,然后我們自己定義一些訪問結構體的函數,在.h文件中,只存放函數原型聲明和對結構體的聲明。

看個例子

.c文件中

//stu.c#include <stdio.h>#include <stdlib.h>#include <string.h>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 <stdio.h>#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;

這樣在main.c中就可以用pStu聲明結構體指針變量了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品xxxx另类| 丁香五六月婷婷久久激情| 亚洲精品动漫久久久久| 欧美精品一二区| 亚洲国产小视频在线观看| 九九久久国产精品| 久久久伊人日本| 丝袜美腿精品国产二区| 国产午夜精品理论片a级探花| 亚洲xxxx视频| 大胆人体色综合| 欧美成人免费视频| 国产精品678| 国产成人高清激情视频在线观看| 色婷婷**av毛片一区| 亚洲精品久久久久中文字幕欢迎你| www.欧美三级电影.com| 超碰日本道色综合久久综合| 亚洲欧洲在线观看| www亚洲精品| 亚洲一区二区黄| 日韩亚洲欧美中文高清在线| 亚洲国产精品成人va在线观看| 黑人巨大精品欧美一区二区免费| 欧美激情区在线播放| 成人欧美在线观看| 久久久免费电影| 欧美日韩成人黄色| 欧美在线观看一区二区三区| 日韩av免费看| 欧美精品福利视频| 97国产成人精品视频| 日韩视频免费在线观看| 亚洲一区二区中文字幕| 精品小视频在线| 日韩欧美亚洲国产一区| 久久久精品中文字幕| 久久久久五月天| 人九九综合九九宗合| 在线观看精品国产视频| 97视频免费看| 在线性视频日韩欧美| 成人有码在线播放| 精品二区三区线观看| 一区二区在线视频| 亚洲精品久久久久久久久久久| 欧美激情免费观看| 亚洲欧美福利视频| 久久全球大尺度高清视频| 日本sm极度另类视频| 91精品国产成人| 国产精品日韩欧美| 最近中文字幕mv在线一区二区三区四区| 国产国语刺激对白av不卡| 中文字幕视频在线免费欧美日韩综合在线看| 欧美在线视频免费观看| 日韩成人网免费视频| 欧美怡春院一区二区三区| 欧美精品在线极品| 欧美国产在线电影| 国产精品精品久久久久久| 在线观看久久av| 2018中文字幕一区二区三区| 国产欧美一区二区三区四区| 日韩亚洲成人av在线| 亚洲欧美在线一区二区| 欧美亚洲国产成人精品| 久久免费少妇高潮久久精品99| 国产精品久久久久久久久久久新郎| 亚洲午夜女主播在线直播| 欧洲美女7788成人免费视频| 亚洲视频在线看| 26uuu另类亚洲欧美日本一| 亚洲欧美三级伦理| 中文字幕一区二区三区电影| 欧美日韩在线视频一区| 91在线网站视频| 日韩中文综合网| 粉嫩av一区二区三区免费野| 欧美激情网站在线观看| 欧美亚洲国产精品| 欧美国产精品va在线观看| 国产剧情久久久久久| 日韩精品在线影院| 亚洲精品有码在线| 97久久精品人人澡人人爽缅北| 亚洲美女av黄| 亚洲三级免费看| 国产精品无av码在线观看| 岛国av一区二区在线在线观看| 懂色aⅴ精品一区二区三区蜜月| 国产精品久久久久久久av电影| 91系列在线播放| 国产午夜精品全部视频在线播放| 日韩中文在线观看| 精品国产一区二区三区久久久狼| 韩国三级电影久久久久久| 成人情趣片在线观看免费| 亚洲欧美国产精品专区久久| 91久久久精品| 精品国产乱码久久久久久天美| 午夜精品一区二区三区在线| 成人在线免费观看视视频| 超碰97人人做人人爱少妇| 国产精品香蕉在线观看| 57pao成人永久免费视频| 在线日韩精品视频| 2023亚洲男人天堂| 日本一区二区在线免费播放| 亚洲精品一区中文字幕乱码| 久久艹在线视频| 日韩精品中文字幕在线观看| 影音先锋欧美在线资源| 欧美日韩国产精品| 国产视频丨精品|在线观看| 午夜精品视频在线| 国产大片精品免费永久看nba| 国产成人+综合亚洲+天堂| 日韩精品福利在线| 欧美性极品少妇精品网站| 日韩精品免费在线视频观看| 久久精彩免费视频| 国产91精品网站| 欧美精品性视频| 欧美日韩国产精品| 亚洲日本成人网| 国产成人精品一区| 国产精品香蕉在线观看| 久久久久亚洲精品成人网小说| 国产一区玩具在线观看| 一区二区成人av| 精品中文视频在线| 亚洲乱码一区av黑人高潮| 亚洲丁香婷深爱综合| 亚洲一级黄色av| 国产一区二区三区高清在线观看| 亚洲毛片一区二区| 欧美精品久久久久久久久| 国产日韩在线精品av| 九九九热精品免费视频观看网站| 日韩精品黄色网| 日韩免费在线电影| 欧美特黄级在线| 一本一本久久a久久精品综合小说| 欧美激情va永久在线播放| 992tv成人免费视频| yw.139尤物在线精品视频| 最近2019好看的中文字幕免费| 国产精品视频网址| 一本大道香蕉久在线播放29| 亚洲精品国产综合久久| 亚洲国产一区二区三区四区| 91超碰caoporn97人人| 日韩精品视频在线| 国产97在线|亚洲| 国产精品视频在线播放| 激情久久av一区av二区av三区| 亚洲人线精品午夜| 国产精品网址在线| 日本高清+成人网在线观看| 青草青草久热精品视频在线网站| www.久久久久久.com| 国产啪精品视频| 成人网中文字幕|