1樓:chanrich輕輕
所謂結構體陣列,是指陣列中的每個元素都是一個結構體。在實際應用中,c語言結構體陣列常被用來表示一個擁有相同資料結構的群體,比如一個班的學生、一個車間的職工等。
結構體可以儲存不同的資料型別,將他們互相聯絡起來。結構體陣列可以連續儲存多個結構體,和陣列作用相似。比如想定義同一個最小外接矩形的四個座標值,並給予這個矩形一個特徵編號。
當需要儲存多個最小外接矩形的資訊時,就需要動態申請一個結構體陣列。
struct 結構體型別名{型別名 成員名;型別名 成員名;……},先宣告結構體型別,再定義結構體變數名。宣告結構體型別,不分配空間,定義結構體型別變數,就要分配記憶體空間。
擴充套件資料:
結構體陣列指標型別:
一個結構體變數的指標就是該變數所佔據的記憶體段的起始地址。可以設一個指標變數,用來指向一個結構體變數,此時該指標變數的值是結構體變數的起始地址,指標變數也可以用來指向結構體陣列中的元素。
1、型別一:
指向結構體變數的指標引用結構體變數中的成員。
2、型別二:
用結構體變數和指向結構體變數的指標構成連結串列,連結串列是一種常見的重要的資料結構。連結串列有一個“頭指標”變數,以head表示,它存放一個地址。該地址指向一個元素。
連結串列中的每一個元素稱為“結點”,每個結點都應包括兩個部分:
一是使用者需要用的實際資料,
2樓:藥郎小跟班
結構體的定義如下所示,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值的大小將不產生任何效果。
3樓:杜哥是個小天才
struct namename;
拓展資料c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。
儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。
二十世紀八十年代,為了避免各開發廠商用的c語言語法產生差異,由美國國家標準局為c語言制定了一套完整的美國國家標準語法,稱為ansi c,作為c語言最初的標準。目前2023年12月8日,國際標準化組織(iso)和國際電工委員會(iec)釋出的c11標準是c語言的第三個官方標準,也是c語言的最新標準,該標準更好的支援了漢字函式名和漢字識別符號,一定程度上實現了漢字程式設計。
4樓:知識慧
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後就不能再繼續定義該型別的變數。
5樓:安徽新華電腦專修學院
struct在c語言中是一個關鍵字,用於定義結構資料型別。
問題中的兩種定義的區別在於第一種是給student資料型別,重新定義了一個型別別名,而第二種則單純的表示一種叫做student的資料結構型別。兩者的主要區別在於後面直接定義變數時。如下**,則可以直接在結構體後面定義一個zhang_san的結構體變數。
12345
struct studentzhang_san;
而第一種的定義,則會出現錯誤。
12345
typedef struct studentstudent zhang_san;
擴充套件:“結構”是一種構造資料型別,現在一般叫做使用者自定義資料型別,它是由若干“成員”組成的。 每一個成員可以是一個基本資料型別或者又是一個構造型別。
結構即是一種“構造”而成的資料型別, 那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和呼叫函式之前要先定義一樣。
定義一個結構的一般形式為:
1234
struct結構名;
成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作型別說明,其形式為:“型別說明符 成員名;”。成員名的命名應符合識別符號的書寫規定。例如:
1234567
struct stu;
在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型陣列;第三個成員為***,字元型變數;第四個成員為score,浮點型變數。 應注意在括號後的分號是必不可少的。
6樓:心安國際楊晶晶
在實際問題中,一組資料往往具有不同的資料型別;例如在學生資訊登記表中,姓名為字元型,學號為整型或字元型,年齡為整型,性別為字元型,成績為整型或實型。因為資料型別不同,顯然不能用一個陣列來存放。
在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)!
c語言結構體的定義,C語言結構體的定義
滑映寒愈霽 第二個struct student是定義了一個student結構體,這個明白吧。第一個是用typedef把struct student這個結構體型別名字重新定義為student,也就是說struct student和student表示同一個事物,都是一個型別的識別符號,比如 typede...
c語言結構體別名定義問題,C語言結構體別名定義問題
typedef struct stu linklist 此處第一了一個型的型別,即struct stu 即指向結構體stu的指標 所以head的型別也就是struct stu head為一個指向stu結構體型別的指標。但是並沒有未其分配具體的空間。可以將一個已定義為stu結構體的指標賦給它。 c語言...
C語言連結串列與結構體,c語言結構體與連結串列
北風微風 include include define null 0 define len sizeof struct student struct student int n struct student creat void if n 0 head null p2 next null free ...