1樓:心安國際楊晶晶
在實際問題中,一組資料往往具有不同的資料型別;例如在學生資訊登記表中,姓名為字元型,學號為整型或字元型,年齡為整型,性別為字元型,成績為整型或實型。因為資料型別不同,顯然不能用一個陣列來存放。
在c語言中,可以使用結構體(struct)來存放一組不同型別的資料。定義結構體的一般形式為:
struct 結構體名;
每個成員都是結構體的組成部分,有名字,也有資料型別,形式為:
型別說明符 成員名;
例如用結構體來表示學生資訊:
struct stu;
結構體是一種構造資料型別(也稱複雜資料型別),由若干不同型別的變數(資料)組成。每個變數都是結構體的成員(member),每個成員可以是基本資料型別,也可以是構造型別。相應的,int、char、float 這些資料型別被稱為基本資料型別。
上面的**定義了一個結構體,名字為stu。stu由4個成員組成,分別為 name、num、***、score。
注意大括號後面的分號;不能少。
結構體變數
結構體也是一種資料型別,可以用來說明變數。例如:struct stu stu1, stu2;定義了兩個變數 stu1 和 stu2,它們都是 stu 型別,都由 4 個成員組成。
注意關鍵字struct不能少。
stu 就像一個「模板」,定義出來的變數都具有相同的性質。也可以將結構體比作「圖紙」,將結構體變數比作「零件」,根據同一張圖紙生產出來的零件的特性都是一樣的。
結構體的各個成員在記憶體中是連續儲存的。stu1、stu2 的記憶體如下圖所示:
你也可以在定義結構體的同時定義結構體變數:
struct stu stu1, stu2;
將變數放在結構體定義的最後即可。
如果只需要 stu1、stu2 兩個變數,也可以不寫結構體名字:
struct stu1, stu2;
這樣做書寫簡單,但是因為沒有結構體名,後面就沒法用該結構體定義新的變數。
也可以用巨集定義使一個符號常量來表示一個結構型別,例如:
#define stu struct stu
stu;
stu stu1, stu2;
後面我們會學習windows程式設計,大部分結構體都是這樣定義的。
成員的獲取和賦值
在c語言中,使用點號.來獲取結構體中的一個成員,一般格式為:
結構變數名.成員名
例如:stu1.name; //第一個學生的姓名
stu2.score; //第二個學生的成績
獲取成員後,就可以對該成員進行賦值了,例如:
stu1.name = "tom";
stu2.score = 90.5;
除了可以對成員進行逐一賦值,也可以像陣列一樣整體賦值,例如:
struct stu stu1, stu2 = ;
不過整體賦值僅限於上面這樣的情況,也就是定義結構體的同時宣告變數。下面的寫法是錯誤的:stu2 = ;
一個完整的示例:
#include
#define stu struct stu
int main();
stu stu1;
stu1.name = "james bond";
stu1.num = 1;
stu1.*** = 'm'; //用m表示男性,w表示女性
stu1.score = 99;
printf("hello everyone! my name is %s, a naughty boy, but with good scores(%.2f) and top no.
(%d)!", stu1.name, stu1.
score, stu1.num);
return 0;
}執行結果:
hello everyone! my name is james bond, a naughty boy, but with good scores(99.00) and top no.
(1)!
2樓:匿名使用者
1、結構體(struct)是由一系列具有相同型別或不同型別的資料構成的資料集合,叫做結構。
2、在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregate data type)的一類。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。
3樓:匿名使用者
先宣告資料結構
struct 結構名
;接著就是定義結構了
struct 結構名 結構變數名稱
例子:struct stutent
;struct stutent stu;
c語言中如何定義一個結構體
4樓:藥郎小跟班
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標誌,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體宣告的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體型別的指標,而通常這種指標的應用是為了實現一些更高階的資料結構如連結串列和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整宣告。
擴充套件資料:
一、結構體作用:
結構體和其他型別基礎資料型別一樣,例如int型別,char型別,只不過結構體可以做成你想要的資料型別,以方便日後的使用。
在實際專案中,結構體是大量存在的,研發人員常使用結構體來封裝一些屬性來組成新的型別。由於c語言內部程式比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。
結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
二、結構體的大小與記憶體對齊:
結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是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值的大小將不產生任何效果。
5樓:啦啦啦咯哦
c語言結構體型別的定義模板大概為:
struct 型別名 變數;
在c語言中,結構體(struct)指的是一種資料結構,是c語言中聚合資料型別(aggregate data
type)的一類。結構體可以被宣告為變數、指標或陣列等,用以實現較複雜的資料結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的型別,成員一般用名字訪問。
在成員表列中可以是幾種基本資料型別,也可以是結構體型別。
struct 型別名{} 變數;後的分號不能漏
下面給出定義結構體型別的幾種方法:
1. 先定義結構體型別,再定義結構體變數。
struct student;
struct student stu1,stu2;//此時stu1,stu2為student結構體變數
2. 定義結構體型別的同時定義結構體變數。
struct student stu1,stu2;
此時還可以繼續定義student結構體變數如:
struct student stu3;
一般不會使用第三種定義方法,因為直接定義結構體變數stu1,stu2後就不能再繼續定義該型別的變數。
6樓:杜哥是個小天才
struct namename;
拓展資料c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。
儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。
二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言制定了一套完整的美國國家標準語法,稱為ansi c,作為c語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。
7樓:匿名使用者
struct node
這樣就定義了一個結構體型別node,它有兩個int型別的成員,分別是a和b,定義變數是用
struct node st_a;
這樣的形式.(例如,上式就定義了一個名為st_a的結構體變數)
8樓:**夢幻
struct name
9樓:匿名使用者
struct 結構名 ;
如struct a ;
10樓:匿名使用者
struct student //結構體型別的說明與定義分開。 宣告 {...
2.2 . 不環保的方式 #include struct student /*宣告時直接定義*/ { int...3.
結構體怎麼定義怎麼用啊?
11樓:藍色草原
定義個結構體,然後就像用其他的變數一樣使用就可以了。
比如你定義變數的時候類似這樣使用:
int a,sum;
a=5;
sum=a+3;
同樣,結構體的用法也是一樣,比如:
struct _num
num;
num.a=5;
num.sum=num.a+3;
基本用法就是這樣,使用結構體變數只是一組變數的集合,這組變數型別可以不一樣,它是把一組相關的變數構成一個整體來用,方便使用者處理。
c語言結構體定義,C語言結構體定義
c語言結構體定義 struct為結構體關鍵字,tag為結構體的標誌,member list為結構體成員列表,其必須列出其所有成員 variable list為此結構體宣告的變數。結構體是c語言中聚合資料型別 aggregatedatatype 的一類。結構體可以被宣告為變數 指標或陣列等,用以實現較...
c語言結構體別名定義問題,C語言結構體別名定義問題
typedef struct stu linklist 此處第一了一個型的型別,即struct stu 即指向結構體stu的指標 所以head的型別也就是struct stu head為一個指向stu結構體型別的指標。但是並沒有未其分配具體的空間。可以將一個已定義為stu結構體的指標賦給它。 c語言...
定義了結構體,結構體有個成員變數是指標型別,而這個變數有是結構體,請問怎麼對這個指標初始化
例如有a,b兩個結構體,a中有b 在main中需要先初始化個b,完成b之後,然後呼叫a.b,這樣就可以完成了!如果直接呼叫a的話,有可能溢位 沒賦具體值時都給null就好 struct a a struct a malloc sizeof struct a memset a,0,sizeof str...