中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言如何隱藏結構體

發布時間:2022-04-02 10:41:21 來源:億速云 閱讀:366 作者:iii 欄目:編程語言

這篇“C語言如何隱藏結構體”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“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_H

struct 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;

以上就是關于“C語言如何隱藏結構體”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邢台市| 全南县| 黄梅县| 凌源市| 新龙县| 凌云县| 连平县| 昆山市| 邯郸县| 临汾市| 阿合奇县| 罗江县| 金溪县| 昌平区| 伊川县| 营山县| 阿克陶县| 古交市| 沁源县| 永康市| 荆门市| 永城市| 蒲江县| 微山县| 屯留县| 乃东县| 政和县| 都昌县| 昭通市| 芜湖县| 东港市| 澄江县| 公主岭市| 清水县| 洛宁县| 武定县| 柘荣县| 井研县| 唐海县| 铜陵市| 孟州市|