c c 結構體知識介紹

2021-07-22 20:24:41 字數 3395 閱讀 8958



1.

結構體型別定義

定義方式

1:

typedef struct  lnode *linklist;

定義方式

2:

struct  lnode

typedef struct  lnode  *linklist;

以上兩個定義方式是等價的,是將

*linklist

定義為struct  lnode

型別,即

linklist

被定義為乙個型別名。這樣就可以用

linklist

來定義說明新的變數了,如:

linklist  l

即將

l定義為

struct  lnode

型別的指標變數

2.

結構體型別變數定義

定義方式

1:

struct  lnode lnodea

定義方式

2:

struct  lnode

struct  lnode lnodea

以上兩個定義方式也是等價的,這樣就將

lnodea

定義為乙個

truct  lnode

型別的變數,即

lnodea

為乙個truct  lnode

型別的變數名。

3.結構體的大小與記憶體對齊

結構體的大小不是結構體元素單純相加就行的,因為我們現在主流的計算機使用的都是

32bit

字長的cpu

,對這型別的

cpu取

4個位元組的數要比取乙個位元組要高效,也更方便。所以在結構體中每個成員的首位址都是

4的整數倍的話,取資料元素是就會相對更高效,這就是記憶體對齊的由來。

每個特定平台上的編譯器都有自己的預設

「對齊係數

」(也叫對齊模數

)。程式設計師可以通過預編譯命令

#pragma pack(n)

,n=1,2,4,8,16

來改變這一係數,其中的

n就是你要指定的

「對齊係數

」。  

規則:   1、

資料成員對齊規則:結構

(struct)(

或聯合(union))

的資料成員,第乙個資料成員放在

offset為0

的地方,以後每個資料成員的對齊按照

#pragma pack

指定的數值和這個資料成員自身長度中,比較小的那個進行。   2、

結構(或聯合)

的整體對齊規則:在資料成員完成各自對齊之後,結構

(或聯合

)本身也要進行對齊,對齊將按照

#pragma pack

指定的數值和結構

(或聯合

)最大資料成員長度中,比較小的那個進行。   3、

結合1、2

顆推斷:當

#pragma pack的n

值等於或超過所有資料成員長度的時候,這個

n值的大小將不產生任何效果。

4.c++中的結構體

c語言中,可以定義結構體型別,將多個相關的變數包裝成為乙個整體使用。在結構體中的變數,可以是相同、部分相同,或完全不同的資料型別。

c語言中,結構體不能包含

函式。

物件導向的程式設計

中,物件具有狀態(屬性)和行為,狀態儲存在成員變數中,行為通過成員方法(函式)來實現。

c語言中的結構體只能描述乙個物件的狀態,不能描述乙個物件的行為。

c++中,考慮到

c語言到

c++語言過渡的連續性,對結構體進行了擴充套件,

c++的結構體可以包含函式,這樣,

c++的結構體也具有

類的功能,與

class

不同的是,結構體包含的函式預設為

public

,而不是

private

c++控制台輸出例子:  

#include

#include

//定義結構體  

struct point ;

using namespace std;

int main(int argc, char *argv)

5.c++中的結構體與類的區別

類與結構體在

c++中只有兩點區別,除此這外無任何區別。  

(1)class

中預設的成員訪問許可權是

private

的,而struct

中則是public

的。  

(2)從class

繼承預設是

private

繼承,而從

struct

繼承預設是

public繼承

6.這兩種定義的區別

typedef struct student

student;

struct student ;

第二個struct student

是定義了乙個

student

結構體,這個明白吧。

第乙個是用

typedef

把struct student

這個結構體型別名字重新定義為

student

,也就是說

struct student

和student

表示同乙個事物,都是乙個型別的識別符號,比如

typedef int zhengshu;

就是你把整型

int重新命名為

zhengshu

,下面定義:

int i;

和zhengshu i;

兩句就是等價的了

c c結構體陣列 結構體指標

結構體中自己常常弄不清的。兩個常用的結構體陣列 結構體指標 將自定義的結構體放入到陣列中方便維護 語法 語法 struct 結構體名 陣列名 元素個數 舉例 struct student intmain for int i 0 i 3 i 2 結構體指標 顧名思義就是指向結構體的乙個指標 通過指標訪...

c c 結構體呼叫

1 最近做專案遇到,c 呼叫c dll裡的函式需要傳遞結構體引數,發現這個並不是簡單的在c 裡定義相應的結構體就可以的,下面以乙個例子來說明解決的辦法,c 中的函式和結構體如下 uint msec set igr gen cfg int port,igr gen t igr gen typedef ...

C C 結構體詳解

前面沒有typedef的 最後乙個 後面的都是結構體變數,結構體變數陣列,結構體指標變數,都是變數。有typedef的 最後乙個 後面的都是型別,是可以拿來構建變數的。typedef struct freaarea 定義乙個空閒區說明表結構 elemtype elemtype data elemty...