真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語言中怎么隱藏結(jié)構(gòu)體-創(chuàng)新互聯(lián)

今天就跟大家聊聊有關(guān)C語言中怎么隱藏結(jié)構(gòu)體,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

10年積累的網(wǎng)站設(shè)計、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有巴彥免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

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

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

看個例子

.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文件中,我定義了一個結(jié)構(gòu)體,并且定義了一些用于操作這個結(jié)構(gòu)體的函數(shù)。

在.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中我聲明了一下結(jié)構(gòu)體struct stu,并且寫了函數(shù)的原型聲明,供其他文件調(diào)用。

在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("設(shè)置的id為:%s\n",id);
  return 0;


  
}

可以看到,在main函數(shù)中,我先是定義了一個struct stu類型的指針,然后通過new_stu()給這個指針分配了空間,在通過另外兩個函數(shù)對其進行了操作。

這里需要注意一下我注釋掉的部分,說明一下:

這種情況下,不能定義struct stu類型的變量!?。?/p>

因為:

.h文件中,只是對結(jié)構(gòu)體進行了聲明,并沒有結(jié)構(gòu)體具體細節(jié)的描述,也就是在main.c中只是聲明了一下struct stu,這樣編譯器就知道有個結(jié)構(gòu)體類型叫struct stu,但是它并不知道stu的內(nèi)部細節(jié)。

我們都知道,定義一個變量,編譯器是要給它分配內(nèi)存空間的,但是,此時編譯器并不知道stu的內(nèi)部細節(jié),也就不知道stu這個結(jié)構(gòu)體的變量要占多少空間,自然無法分配內(nèi)存。這樣在編譯時期就會報錯。

但是定義一個指針變量就不一樣啦,不管是什么類型的指針,占據(jù)的內(nèi)存空間都是4個字節(jié),編譯器只需要確定有個叫struct stu 的類型存在就好了,而.h中那個聲明,就是在告訴編譯器,有這么一個類型。

同時,這種情況下也不能訪問結(jié)構(gòu)體的字段,比如,s->score=100;這條語句在編譯時就會報錯,原因和上面一樣,編譯器并不知道struct stu結(jié)構(gòu)體的內(nèi)部細節(jié)。

通過上面的方法,在除了stu.c文件之外的其他文件中,只能通過stu.c中定義的函數(shù)來間接操作結(jié)構(gòu)體變量,而不能直接對結(jié)構(gòu)體變量進行操作,包括不能創(chuàng)建一個結(jié)構(gòu)體變量!

這樣就很好地體現(xiàn)了程序的封裝性,也提高了程序的安全性。但是就需要我們寫很多操作函數(shù)啦,包括創(chuàng)建結(jié)構(gòu)體指針變量分配空間的函數(shù)。

我們也可以在.h文件中用typedef聲明一個結(jié)構(gòu)體的指針類型,如  typedef struct sut * pStu;

看完上述內(nèi)容,你們對C語言中怎么隱藏結(jié)構(gòu)體有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


分享題目:C語言中怎么隱藏結(jié)構(gòu)體-創(chuàng)新互聯(lián)
文章鏈接:http://weahome.cn/article/ecjhc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部