再談結構體

2021-10-25 17:10:00 字數 1482 閱讀 4943

結構體的基礎知識:

結構識一些值的集合,這些值稱為成員變數。結構的每個成員可以是不同型別的變數。

宣告

例如描述乙個學生型別:

//宣告乙個結構體型別

//宣告乙個學生型別,是想用學生型別來建立學生變數(物件)

//描述學生屬性:名字,**,性別,年齡

struct stu; //結構體型別宣告,分號不能丟

int main()

在結構體中不能包含乙個型別為該結構體本身的成員,比如以下這種方式是錯誤的

struct node;
正確的自引用方式:

struct node;
有了結構體型別後,定義變數如下:

struct s;

int main();

printf("%c %d %lf %s\n",s.c,s.a,s.d,s.arr);

return 0; //因之前文章寫過這部分,這裡簡單提一下

}

如何計算?對齊規則(理解一下就好,用處不大):

為什麼存在記憶體對齊?

2,效能原因:資料結構(尤其是棧)應該盡可能的在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問;而對齊的記憶體訪問僅需一次訪問。

總體來說:

結構體的記憶體對齊是拿空間來換取時間的做法。

實操案例如下:

struct s1;

struct s2;

int main();

printf("%d\n",sizeof(s1)); //結果為12

struct s2 s2=;

printf("%d\n",sizeof(s2)); //結果為8

return 0;

}

直接上**:

#includestruct s;

void init(struct s* ps)

//傳值

void print1(struct s tmp)

//傳址

void print2(struct s* ps)

int main();

init(&s);

print1(s);

print2(&s); //選擇print2函式(傳位址)好一些

return 0;

}

1,位段的成員必須是int、unsigned int、或signed int。

2,位段的成員名後邊有乙個冒號或乙個數字。

比如:

#includestruct s;

int main()

再談結構體

1。定義方法 簡單,不推薦 struct point 這種定義結構體的方法,沒有辦法再次引用這個結構體了,因為它沒有名字。只能是使用乙個變數point了 2。struct point point1 推薦 這種方法可以直接使用變數 point1,並且向後,還可以使用 struct point poin...

再談結構體

示例 include using namespace std struct point point operator const point a,const point b ostream operator ostream out,const point p intmain 結構體point中定義了...

結構體型別 結構體變數 結構體陣列 結構體指標

問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...