c語言的structure
⑴ struct在c語言中是什麼意思
在C語言中,可以使用結構體(Struct)來存放一組不同類型的數據。
結構體的定義形式為:
struct結構體名{
結構體所包含的變數或數組
};
結構體是一種集合,它裡麵包含了多個變數或數組,它們的類型可以相同,也可以不同,每個這樣的變數或數組都稱為結構體的成員(Member)。
例子:
struct stu{
char *name; //姓名
int num; //學號
int age; //年齡
char group; //所在學習小組
float score; //成績
};
stu為結構體名,它包含了5個成員,分別是name、num、age、group、score。結構體成員的定義方式與變數和數組的定義方式相同,只是不能初始化。
(1)c語言的structure擴展閱讀
結構體變數——
既然結構體是一種數據類型,那麼就可以用它來定義變數。
例如:
struct stu stu1, stu2;
定義了兩個變數 stu1 和 stu2,它們都是 stu 類型,都由 5 個成員組成。注意關鍵字struct不能少。
stu 就像一個「模板」,定義出來的變數都具有相同的性質。也可以將結構體比作「圖紙」,將結構體變數比作「零件」,根據同一張圖紙生產出來的零件的特性都是一樣的。
⑵ C語言中struct是個什麼意思 怎麼用 能不能通俗點說
結構(struct)
結構是由基本數據類型構成的、並用一個標識符來命名的各種變數的組合。
結構中可以使用不同的數據類型。
結構說明和結構變數定義
在Turbo C中, 結構也是一種數據類型, 可以使用結構變數, 因此, 象其它 類型的變數一樣, 在使用結構變數時要先對其定義。定義結構變數的一般格式為:
struct 結構名
{
類型 變數名;
類型 變數名;
...
} 結構變數;
結構名是結構的標識符不是變數名。 類型為第二節中所講述的五種數據類型(整型、浮點型、字元型、指針型和 無值型)。
構成結構的每一個類型變數稱為結構成員, 它象數組的元素一樣, 但數組中 元素是以下標來訪問的, 而結構是按變數名字來訪問成員的。 下面舉一個例子來說明怎樣定義結構變數。
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} person;
這個例子定義了一個結構名為string的結構變數person, 如果省略變數名 person, 則變成對結構的說明。用已說明的結構名也可定義結構變數。這樣定義 時上例變成:
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
}; struct string person;
如果需要定義多個具有相同形式的結構變數時用這種方法比較方便, 它先作 結構說明, 再用結構名來定義變數。
如果省略結構名, 則稱之為無名結構, 這種情況常常出現在函數內部, 用這 種結構時前面的例子變成:
struct
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} Tianyr, Liuqi;
結構作為一種數據類型, 因此定義的結構變數或結構指針變數同樣有局 部變數和全程變數, 視定義的位置而定。
結構變數名不是指向該結構的地址, 這與數組名的含義不同, 因此若需要求結構中第一個成員的首地址應該是&[結構變數名]。
(2)c語言的structure擴展閱讀:
結構體變數可進行哪些運算
結構體變數不能相加、不能相減,也不能相互乘除,但結構體變數可以相互賦值。也就是說,可以將一個結構體變數賦給另一個結構體變數。但前提是這兩個結構體變數的結構體類型必須相同。
結構體變數的引用方式決定了:
「結構體變數名」可以與「結構體成員名」同名。
「結構體變數名」可以與「結構體名」同名。
「兩個結構體類型定義的結構體變數中的成員可以同名」。
就比如定義了一個結構體類型用於存放學生的信息,裡面有成員「char name[20];」,那麼如果又定義了一個結構體類型用於存放老師的信息,那麼裡面也可以有成員「char name[20];」
因為結構體成員在引用時,必須要使用「結構體變數名.成員名」的方式來引用,通過引用就可以區分它們,所以不會產生沖突,因此可以同名!
只要不沖突,都可以重名!但是兩個結構體變數名就不可以重名了,因為無法區分它們,就會產生沖突。當然這里說的是在同一個作用域內,如果在一個函數中定義一個局部變數a,那麼在另一個函數中當然也可以定義一個局部變數a。它們互不影響。
⑶ C語言結構體定義
C語言結構體定義:struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
結構體是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(3)c語言的structure擴展閱讀
1、struct是聲明結構體類型時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。
2、structSTUDENT是定義的數據類型的名字,它向編譯系統聲明這是一個「結構體類型」,包括name、num、sex、age、score、addr等不同類型的項。
3、structSTUDENT與系統提供的int、char、float、double等標准類型名一樣,都是數據類型,具有同樣的作用,都是用來定義變數的。
⑷ 請教C語言中struct的用法
在C語言中,可以使用結構體(Struct)來存放一組不同類型的數據。結構體的定義形式為:
struct 結構體名{
結構體所包含的變數或數組
};
結構體是一種集合,它裡麵包含了多個變數或數組,它們的類型可以相同,也可以不同,每個這樣的變數或數組都稱為結構體的成員(Member)。
結構體定義:
第一種:只有結構體定義
struct stuff{
char job[20];
int age;
float height;
};
第二種:附加該結構體類型的「結構體變數」的初始化的結構體定義
//直接帶變數名Huqinwei
struct stuff{
char job[20];
int age;
float height;
}Huqinwei;
也許初期看不習慣容易困惑,其實這就相當於:
struct stuff{
char job[20];
int age;
float height;
};
struct stuff Huqinwei;
第三種:如果該結構體只用一個變數Huqinwei,而不再需要用struct stuff yourname;去定義第二個變數。
那麼,附加變數初始化的結構體定義還可進一步簡化出第三種:
struct{
char job[20];
int age;
float height;
}Huqinwei;
把結構體名稱去掉,這樣更簡潔,不過也不能定義其他同結構體變數了——至少我現在沒掌握這種方法。
結構體變數及其內部成員變數的定義及訪問。
要分清結構體變數和結構體內部成員變數的概念。
就像剛才的第二種提到的,結構體變數的聲明可以用:
struct stuff yourname;
其成員變數的定義可以隨聲明進行: struct stuff Huqinwei = {"manager",30,185};
也可以考慮結構體之間的賦值:
struct stuff faker = Huqinwei;
//或 struct stuff faker2;
// faker2 = faker;
列印,可見結構體的每一個成員變數一模一樣
如果不使用上邊兩種方法,那麼成員數組的操作會稍微麻煩(用for循環可能好點)
Huqinwei.job[0] = 'M';
Huqinwei.job[1] = 'a';
Huqinwei.age = 27;
Huqinwei.height = 185;
結構體成員變數的訪問除了可以藉助符號".",還可以用"->"訪問。
(4)c語言的structure擴展閱讀:
結構體數組與結構體指針:
一個結構體變數中可以存放一組數據;如一個學生的學號、姓名、成績等數據。如果有10個學生的數據需要參加運算顯然應該用數組,這就是結構體數組結構體數組與以前介紹過的數值型數組不同之處:每個數組元素都是一個結構體類型的數據,它們都分別包括各個成員(分量)項。
結構體指針和其他類型的指針都是一樣的理解,在32位平台不管啥類型的指針都佔4個位元組的空間。
結構體指針就是指向結構體變數的指針;如果一個指針變數中保存了結構體變數的首地址,那麼這個指針變數就指向該結構體變數.通過結構體指針即可訪問該結構體變數,這與數組指針和函數指針的情況是相同的結構指針變數說明的一般形式為:
struct 結構體名 *結構體指針變數名struct student *p = &Boy; //假設事先定義了 struct student Boy。
⑸ 關於C語言中的結構體
如果在結構體定義時,或定義後取了別名,可以用別名,否則不能省「struct」
如:typedef struct Teacher TEACHER;
則可以用TEACHER 代替struct Teacher
C語言的結構體沒有存取控制許可權,相當於C++存取控制許可權中的public:
追問:
那struct Teacher *creat(struct Teacher *head);
和Teacher *creat(struct Teacher *head);
一樣嗎?如果不一樣的話有什麼區別呢?
追答:
是一樣的,struct Teacher 和Teacher只是同一東西的兩種不同寫法。
⑹ C語言的結構體和共同體的區別是什麼
結構體(structure)是一種構造類型,它是由若干「成員」組成的。每一個成員可以是一個基本數據類型或者又是一個構造類型,而且每個成員的數據類型可以相同也可以不相同。共同體(union)將幾種不同的變數儲存在同一內存單元中,也就是使用覆蓋技術,幾個變數互相覆蓋,這種幾個不同的變數共同佔用一段內存的結構,可見二者最大的區別就是所佔用的內存,結構體(structure)所佔用的內存是分量內存之和,共同體(union)所佔用的內存是等於最大的分量的內存。
具體來說,結構體(structure)與共同體(union)主要有以下區別:
1.結構體(structure)與共同體(union)都是由多個不同的數據類型成員組成,
但在任何同一時刻,
共同體(union)中只存放了一個被選中的成員,
而結構體(structure)的所有成員都存在。在結構體(structure)中,各成員都佔有自己的內存空間,它們是同時存在的。一個結構體(structure)變數的總長度等於所有成員長度之和。在共同體(union)中,所有成員不能同時佔用它的內存空間,它們不能同時存在。共同體(union)變數的長度等於最長的成員的長度。
2.
對於共同體(union)的不同成員賦值,
將會對其它成員重寫,
原來成員的值就不存在了,
而對於結構體(structure)的不同成員賦值是互不影響的。
⑺ c語言struct是什麼意思
struct是C語言結構體類型的標識符。
結構體支持把一組變數整合起來形成一個大的變數,其定義形式為:
struct name{
type1 var1;
type2 var2;
...
typen varn;
};
定義中的varx稱為結構體的成員變數,可以為任意變數形式。當定義這樣的結構體後,struct name就成為一種自定義類型。
於是
struct student就是被命名為student的一個結構體類型名。
⑻ C語言結構體Struct怎麼使用
在Turbo C中,結構也是一種數據類型, 可以使用結構變數,因此,像其它類型的變數一樣,在使用結構變數時要先對其定義。
如果需要定義多個具有相同形式的結構變數時用這種方法比較方便,它先作結構說明,再用結構名來定義變數。
(8)c語言的structure擴展閱讀
指向結構體的指針是一個一直都沒有掌握好的點,希望這里能記錄好一點,加強理解。
對於指針有幾個好處,
第一:就像指向數組的指針比數組本身更容易操作一樣,指向結構的指針通常也更容易操作;
第二:在早期的C中參數傳遞只能使用結構的指針;
第三:很多奇妙的數據表示都是用了包含指向其他結構的指針的結構。
和數組不同,結構的名字不是該結構的地址(即單獨的結構名並不是該結構地址的同義詞),必須使用 & 運算符。
參考資料c語言結構體struct相關使用說明
⑼ c語言結構體
data是你定義的一個結構類型(類似於int),DT是一個data的變數(類似於int i)。p是一個指針,用於指向一個data變數。
data的定義常見於單鏈表的節點結構,包含數據和指針兩部分內容。數據當然是用來保存數據的,而指針用於把一個一個的節點串起來,在邏輯上形成一個鏈表
⑽ C語言 structure& array
應該是遍歷所有的allData條目,每發現一個條目的year == yearWant, 就把它放到yearData的尾部。
假設allData的長度是L,大概長這樣:
inttail=0,i;
for(i=0;i<L;i++)
if(allData[i].year==yearWant)
yearData[tail++]=allData[i];