我眼中的結構體

2021-07-11 16:34:15 字數 2788 閱讀 7157

聚合資料型別:能夠同時儲存超過乙個的單獨資料(例如c語言中的陣列和結構體)

結構體是一些值的集合,這些值成為它的成員,既是一種自定義型別,也是一種聚合資料型別。

1,宣告

在宣告結構體時,必須列出它包含的所有成員。

struct a 

;

a僅僅為乙個標籤,單獨的a並不是結構體的型別,struct a才是。a,c為它的成員列表,一定注意後面的分號千萬不能丟,沒有就出錯了。

struct a

sa1,sa2;

又如這種形式,sa1和sa2是結構體的變數列表,如果沒有標籤的話,記得一定要有,否則還是錯的。

那麼,想要在外部定義乙個結構體型別的變數又該怎麼做呢?

struct a s;
好像依舊很麻煩,因為struct還是不能省略,於是,我們又想到了另乙個辦

typedef  struct s

s;

這樣,我們就可以省略struct了,巧妙地運用型別重新命名typedef解決了此問題,有木有很棒呢。
s s; 

s *ps;

宣告完成之後,該怎樣對它進行賦值呢?

2.初始化

s.a=10;s.name="zhangsan";s.c='w';

是這樣嗎,看似好像沒什麼問題,然而是no,給你說什麼來著,陣列名代表陣列首元素的位址,看看你又忘了,沒好好複習吧,該罰,嘻嘻。當然,你怎麼能將乙個常量字串賦給乙個位址呢,這樣做當然是不對滴。那到底怎樣才算對呢,聽我細細給你道來.

strcpy(s.name,"zhangsan");

又比如
ps=&s;
這樣一來,我們就可以通過兩種方式來訪問其內部成員

strcpy(ps-->name,"zhangsan");

strcpy((*ps).name,"zhangsan");

當然,兩種方式的效果是一樣一樣的!

整體初始化:

s s=;
3.巢狀

typedef struct s 

s;typedef struct stu

stu;

可通過s.s.a訪問s中的成員a,由此可見,結構體內部的多層巢狀可通過『.』來訪問。

初始化則為:

stu s=,"7417147474741"};
4.結構體的自引用

typedef struct node

node;

注意成員列表中的struct不能省略

5.不完整的宣告

struct b;

struct a

;struct b

;

因為b中用到了a,a中又用到了b,所以當中必須有乙個委曲求全一下,例如b,做了乙個不完整的宣告

typedef struct a

a;

你覺得會輸出幾呢?如果你想的是5,那就錯了,因為你沒考慮到他的記憶體對齊,正確結果是8.再看一下下面一段**:

typedef struct a

a;

你可能說,上次忘了考慮記憶體對齊,這次不會了,於是你信誓旦旦的說答案是12,結果是你又錯了,答案仍然是8,讓我來給你講講為什麼吧!

首先,我們從兩個角度考慮進行分析。

(1)為什麼要記憶體對齊?

(2)記憶體對齊後,如何求取結構體大小?

在這裡,我們需要提到幾個新概念

預設對齊數:每個環境下均不相同chengyuan

vc------>8          vs------->8            linux-------->4

對齊數:成員自身大小和預設對齊數的較小值

偏移數:成員變數在記憶體中偏移的位元組數

規定每個成員必須放到其對齊數的倍數字置處

結構體的大小必須是最大對齊數的倍數

此結構體的大小為8

此結構體的大小仍為8

下面介紹一下結構體中巢狀結構體的記憶體對齊

此結構體的大小為32。

此結構體大小為40,因為結構體的大小必須為整體最大對齊數的倍數

小白眼中的C 結構體

沒辦法老提示我名字重複率太高 如果學過c的結構體,c 的看著還其實還好,如果沒學過的話,請先看一下下面的內容 struct name a 建立了乙個叫a的結構體儲存個人資訊 cin a.age 輸入這個人的年齡,名稱加 可以選擇某一項內容。成員更加標準一點,這樣 運算子又叫做成員運算子。而初始化的話...

我的結構體

我的結構體 使用者自定義的複雜型別,1,定義結構體型別是後面分號不能省略 2,使用struct student st st.成員 賦值注意在其中有char型別成員是不能使用如st.name yellows 應該用strcpy st.name,yellows 3,使用struct student ps...

我,眼中的詩歌

我,眼中的詩歌 給我一杯茶,乙個幽靜的地方,我好看些詩歌。寫前面 詩歌是一種態度。詩歌是燕子低低地飛過屋簷。詩歌是古代西方 盛行的決鬥。詩歌是人類本身一直都存在的 極為樸素的一種本能。詩歌和性別無關 和身材無關,和你曾看過多少書也沒有直接的 聯絡,造物主將嘴巴賦予人類的同時 也賦予了人類詩歌。詩歌是...