c語言結構體類型
㈠ c語言結構體定義
C語言結構體定義:struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
結構體是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(1)c語言結構體類型擴展閱讀
1、struct是聲明結構體類型時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。
2、structSTUDENT是定義的數據類型的名字,它向編譯系統聲明這是一個「結構體類型」,包括name、num、sex、age、score、addr等不同類型的項。
3、structSTUDENT與系統提供的int、char、float、double等標准類型名一樣,都是數據類型,具有同樣的作用,都是用來定義變數的。
㈡ C語言結構體類型
呵呵,前面的都沒說到問題的本質.
建議你先去了解下什麼是指針,什麼是指針變數.
因為指針變數是存放指針的,並沒有被分配所指向數據類型的內存.
從你第一個結構體類型來看是錯的,因為struct student kobe; 這樣是申請一個結構體變數,這樣就分配內存了,這里請理解普通變數和指針變數的區別!接著這樣造成的後果是會無休止申請結構體變數->分配內存->申請結構體變數->分配內存....
但是指針變數就不同,只佔4個位元組而已.並非真正意義上的結構體變數,因為它所佔有的內存並非是結構體大小的內存.
這都需要自己去多寫程序,多理解,說不明白的,只能自己悟.
㈢ C語言中結構體類型名和結構體變數名
structREC
{intn;charc;};
structRECt1,t2;
//這樣寫才是對的啦~~
㈣ C語言結構體類型問題
這個跟以往的調用交換函數後數值沒變是一個道理
雖然函數Mp1中oneday的year改變了
但是實際上主函數中oneday這個結構體的存儲地址里的內容一直沒變
㈤ C語言中結構體類型名與變數名的區別
關於結構體類型,有幾點要說明:
(1) 不要誤認為凡是結構體類型都有相同的結構。實際上,每一種結構體類型都有自己的結構,可以定義出許多種具體的結構體類型。
(2) 類型與變數是不同的概念,不要混淆。只能對結構體變數中的成員賦值,而不能對結構體類型賦值。在編譯時,是不會為類型分配空間的,只為變數分配空間。
(3) 對結構體中的成員(即「域」),可以單獨使用,它的作用與地位相當於普通變數。
(4) 成員也可以是一個結構體變數。
如
struct Date //聲明一個結構體類型Date
{
int month;
int day;
int year;
};
struct Student
//聲明一個結構體類型Student
{
int num;
char name[20];
char sex;
int age;
Date birthday;
char addr[30];
}student1,student2;
//定義student1和student2為結構體類型Student的變數Student的結構見圖7.3所示。圖7.3
(5) 結構體中的成員名可以與程序中的變數名相同,但二者沒有關系。
例如,程序中可以另定義一個整型變數num,它與student中的num是兩回事,互不影響
以上來自網路
而變數名是用戶定義的標識符
如定義了一個名為SU的結構類型,SU a;a就是變數名,SU就是結構類型名
㈥ C語言結構類型
typedef struct Node{
int data;
struct Node *next;
}LNode;
Node是一個結構體的名稱,定義時需要struct Node ff;這種 ,ff是變數。
LNode 是Node 的另外一個名字,原因是因為你用了「typedef " , 你可以直接LNode ff;這樣來定義這種結構體的變數
這種寫法算是給struct 類型 Node另外起一個名字吧
typedef struct {
int data;
struct Node *next;
}LNode;
這種寫法是直接把這個結構體另外命名為LNode,
也就是說沒有了struct Node ff;這種定義方法,只能用LNode ff;來 定義。
原因還是因為typedef, 如果沒有這個關鍵字的話,LNode只是一個這種結構體的變數,不能用來定義,也就是說這種結構體只有一個變數就是————LNode
例如: LNode ff;這種方法是錯誤的。
typedef struct {
int data;
struct *next;
}LNode;這種是不可以通過的,至少我看到的是不可以,錯誤是因為 struct *next; 有問題。
㈦ c語言結構體類型和結構體變數分別是什麼
結構體(structure)是一個或多個相同數據類型或不同數據類型的變數集合在一個名稱下的用戶自定義數據類型。
struct
結構體名
{
成員列表;
};
㈧ C語言中的結構體類型是什麼
結構體是一種數據集合。結構體裡面可以包含多個變數或數組,這些變數/數組的類型可以相同、也可以不同,每個這樣的變數或數組都稱為結構體的成員(Member)。
結構體是一種非常實用的類型,可以將具有邏輯關聯的不同類型數據統合在一起統一管理,可以說是面向對象思維的最底層的基礎。
㈨ c語言中如何定義一個結構體
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體類型的指針,而通常這種指針的應用是為了實現一些更高級的數據結構如鏈表和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整聲明。
(9)c語言結構體類型擴展閱讀:
一、結構體作用:
結構體和其他類型基礎數據類型一樣,例如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值的大小將不產生任何效果。
㈩ c語言中關於結構體類型的定義
struct在C語言中是一個關鍵字,用於定義結構數據類型。
問題中的兩種定義的區別在於第一種是給student數據類型,重新定義了一個類型別名,而第二種則單純的表示一種叫做student的數據結構類型。兩者的主要區別在於後面直接定義變數時。如下代碼,則可以直接在結構體後面定義一個zhang_san的結構體變數。
struct student
{
int num;
struct student *next;
}zhang_san;
而第一種的定義,則會出現錯誤。
typedef struct student
{
int num;
struct student *next;
}student zhang_san;
擴展:
「結構」是一種構造數據類型,現在一般叫做用戶自定義數據類型,它是由若干「成員」組成的。 每一個成員可以是一個基本數據類型或者又是一個構造類型。 結構即是一種「構造」而成的數據類型, 那麼在說明和使用之前必須先定義它,也就是構造它。如同在說明和調用函數之前要先定義一樣。
定義一個結構的一般形式為:
struct結構名
{
//成員表列
};
成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式為:「類型說明符 成員名;」。成員名的命名應符合標識符的書寫規定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型數組;第三個成員為sex,字元型變數;第四個成員為score,浮點型變數。 應注意在括弧後的分號是必不可少的。