麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > C > 正文

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

2020-02-24 14:25:19
字體:
來源:轉載
供稿:網友

在c++中,類和結構的主要區別在于類中的成員變量默認為private,而結構中的成員變量默認為public,下面就由武林技術頻道小編給大家介紹C語言中隱藏結構體的細節吧!

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聲明結構體指針變量了。

上述是武林技術頻道小編為大家介紹的C語言中隱藏結構體的細節,希望對你學習這方面知識有所幫助,同時感謝大家繼續支持武林技術頻道!

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

圖片精選

主站蜘蛛池模板: 成人宗合网 | 四虎久草 | 色婷婷久久一区二区 | 最近中文字幕一区二区 | 91网址在线播放 | 成人免费福利视频 | 国产在线看一区 | 亚洲精品久久久久久久久久久 | 毛片视频在线免费观看 | 一级黄色在线免费观看 | 在线日韩av电影 | 91精品国产777在线观看 | 一本色道久久综合亚洲精品小说 | 最新午夜综合福利视频 | 激情宗合 | 欧美一级黄色片免费观看 | 99视频有精品视频高清 | 香蕉国产在线视频 | 国产一区二区不卡 | 欧美成人一级 | 狠狠干视频网站 | 小视频成人 | av人人| 操嫩草| 91精品国产日韩91久久久久久360 | 国产精品久久久久久久久久久久午夜 | 久久99国产精品久久99果冻传媒 | 国产91一区 | 日韩 综合| 日韩黄站 | 日本网站一区二区三区 | 国产免费成人在线 | 5xsq在线视频 | 久久精品一区二区三 | 中文字幕综合 | 日韩在线欧美在线 | 美女毛片儿 | 国产一级毛片不卡 | 91看片免费版 | 天天夜夜草 | 免费观看一级黄色片 |