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...