❶ 利用c語言中的結構體
#include<stdio.h>
#include<malloc.h>
struct node
{
int item;//數據域
struct node* next;//鏈域
};
void CreateList(struct node *head) {
head = (struct node*)malloc(sizeof(struct node));
if(head==NULL){
printf("create failed");
}else{
head->next = NULL;
head->item=0;
}
}
void ClearList(struct node *head) {
struct node * tmp=head;
while(!head) {
tmp=head->next;
free(head);
head=tmp;
}
}
int ListLength(struct node *head){
struct node * tmp=head;
int length=0;
while(!tmp) {
tmp=tmp->next;
length++;
}
return length;
}
int ListEmpty(struct node *head) {
if(NULL == head->next) {
printf("null\n");
return -1;
} else {
printf("not null\n");
return 0;
}
}
int main(){
//要進行的操作
}
❷ C語言中定義結構體的幾種方法
1、先定義結構體類型,再定義結構體變數。
structstudent{
charno[20];//學號
charname[20];//姓名
charsex[5];//性別
intage;//年齡
};
structstudentstu1,stu2;
//此時stu1,stu2為student結構體變數
2、定義結構體類型的同時定義結構體變數。
structstudent{
charno[20];//學號
charname[20];//姓名
charsex[5];//性別
intage;//年齡
}stu1,stu2;
3、直接定義結構體變數。
struct{
charno[20];//學號
charname[20];//姓名
charsex[5];//性別
intage;//年齡
}stu1,stu2;
(2)c語言中結構體擴展閱讀
結構體的定義
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。
結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。結構體,他就將不同類型的數據存放在一起,作為一個整體進行處理。
❸ C語言結構體Struct怎麼使用
在Turbo C中,結構也是一種數據類型, 可以使用結構變數,因此,像其它類型的變數一樣,在使用結構變數時要先對其定義。
如果需要定義多個具有相同形式的結構變數時用這種方法比較方便,它先作結構說明,再用結構名來定義變數。
(3)c語言中結構體擴展閱讀
指向結構體的指針是一個一直都沒有掌握好的點,希望這里能記錄好一點,加強理解。
對於指針有幾個好處,
第一:就像指向數組的指針比數組本身更容易操作一樣,指向結構的指針通常也更容易操作;
第二:在早期的C中參數傳遞只能使用結構的指針;
第三:很多奇妙的數據表示都是用了包含指向其他結構的指針的結構。
和數組不同,結構的名字不是該結構的地址(即單獨的結構名並不是該結構地址的同義詞),必須使用 & 運算符。
參考資料c語言結構體struct相關使用說明
❹ c語言,結構體
結構體和其他類型基礎數據類型一樣,例如int類型,char類型 只不過結構體可以做成你想要的數據類型。以方便日後的使用。[1]
在實際項目中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的類型。由於C語言內部程序比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。[1]
結構體在函數中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。[1]
結構體的大小與內存對齊
結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是32bit字長的CPU,對這類型的CPU取4個位元組的數要比取一個位元組要高效,也更方便。所以在結構體中每個成員的首地址都是4的整數倍的話,取數據元素時就會相對更高效,這就是內存對齊的由來。每個特定平台上的編譯器都有自己的默認「對齊系數」(也叫對齊模數)。程序員可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數,其中的n就是你要指定的「對齊系數」。[1]
規則:
1、數據成員對齊規則:結構(struct)(或聯合(union))的數據成員,第一個數據成員放在offset為0的地方,以後每個數據成員的對齊按照#pragma pack指定的數值和這個數據成員自身長度中,比較小的那個進行。[1]
2、結構(或聯合)的整體對齊規則:在數據成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大數據成員長度中,比較小的那個進行。[1]
3、結合1、2可推斷:當#pragma pack的n值等於或超過所有數據成員長度的時候,這個n值的大小將不產生任何效果。[1]
C++中的結構體
在C語言中,可以定義結構體類型,將多個相關的變數包裝成為一個整體使用。在結構體中的變數,可以是相同、部分相同,或完全不同的數據類型。在C語言中,結構體不能包含函數。在面向對象的程序設計中,對象具有狀態(屬性)和行為,狀態保存在成員變數中,行為通過成員方法(函數)來實現。C語言中的結構體只能描述一個對象的狀態,不能描述一個對象的行為。在C++中,考慮到C語言到C++語言過渡的連續性,對結構體進行了擴展,C++的結構體可以包含函數,這樣,C++的結構體也具有類的功能,與class不同的是,結構體包含的函數默認為public,而不是private。
❺ C語言結構體定義
C語言結構體定義:struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
結構體是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(5)c語言中結構體擴展閱讀
1、struct是聲明結構體類型時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。
2、structSTUDENT是定義的數據類型的名字,它向編譯系統聲明這是一個「結構體類型」,包括name、num、sex、age、score、addr等不同類型的項。
3、structSTUDENT與系統提供的int、char、float、double等標准類型名一樣,都是數據類型,具有同樣的作用,都是用來定義變數的。
❻ C語言中結構體問題
內存對齊問題,比如這個結構體首地址為0x00000000
(1)
typedef struct{
char c; 0x00000000 1個位元組,後面會填充1個位元組
short s; 0x00000002 2個位元組,後面會填充4個位元組
double d; 0x00000008 8個位元組
short a; 0x00000010 2個位元組,後面會填充2個位元組
int i; 0x00000014 4個位元組
}Data1;
所以這個結構體的大小為24
(2)
struct Inner
{
double d; 8個位元組
short a; 2個位元組,後面會填充2個位元組
int i; 4個位元組
}; 這個為16個位元組
typedef struct
{
char c; 1個位元組,後面會填充1個位元組
short s; 2個位元組,後面會填充4個位元組
struct Inner inner; 16個位元組
}Data3;
所以這個為24個位元組
❼ c語言中關於結構體
這是一個鏈表結構,那個結構體里邊,定義了struct tt *y,賦值的時候,struct tt a[4]={20,a+1,15,a+2,30,a+3,17,a};剛開始的a[0]里邊,x=20,y=a+1,也即a[1]的地址,就是這么賦值下去的。所以,main()
{int i;p=a;這里p指向a數組第一個元素地址,p=p->y;到這句之後就指向了下一個地址,明白了嗎?
❽ 請問下C語言中的結構體有什麼用
C語言中的結構體可以定義一些復雜數據類型,把一些有內在聯系的不同變數放在一起封裝成一個整體,這就是結構體。
例如:以學生為例,學生存在學號,姓名,性別,班級等。此時你可以頂一個結構體,將這些學生信息封裝到一個結構體中。
code如下:
struct student{
int iID //學生的學號
char sStuName[10] //學生姓名
char sSex[10] //學生性別
....
}
(8)c語言中結構體擴展閱讀
C語言結構體在函數中的應用
typedefstructtagSTUDENT{
charname[20];
intage;
}STUDENT;
voidfun(STUDENTstu)
{
printf(「stu.name=%s,stu.age=%d/n」,stu.name,stu.age);
}
❾ 關於c語言中的結構體
#include<stdio.h>
structxs{
charxm[20],xb[3];
floatfs;
}xs1,xs2;
intmain(){
printf("請輸入:姓名性別成績
scanf("%s%s%f",xs1.xm,xs1.xb,&xs1.fs);
printf("%s/t%s/t%.1f ",xs1.xm,xs1.xb,xs1.fs);
return0;
}
❿ 結構體c語言是什麼
在C語言中,結構體(struct)指的是一種數據結構,是C語言中復合數據類型(aggregate data type)的一類。
結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
一、成員訪問
結構體成員依據結構體變數類型的不同,一般有2種訪問方式,一種為直接訪問,一種為間接訪問。直接訪問應用於普通的結構體變數,間接訪問應用於指向結構體變數的指針。
直接訪問使用結構體變數名.成員名,間接訪問使用(*結構體指針名).成員名或者使用結構體指針名->成員名。相同的成員名稱依靠不同的變數前綴區分。
二、變數存儲
在內存中,編譯器按照成員列表順序分別為每個結構體變數成員分配內存,當存儲過程中需要滿足邊界對齊的要求時,編譯器會在成員之間留下額外的內存空間。
如果想確認結構體佔多少存儲空間,則使用關鍵字sizeof,如果想得知結構體的某個特定成員在結構體的位置,則使用offsetof宏(定義於stddef.h)。
匿名struct
匿名struct、匿名union以及C++的匿名class,是指既沒有類型名,也沒有直接用這種類型定義了對象;如果緊隨類型定義之後,又定義了該類型的對象,就不算是匿名類型,與普通情形的使用是一樣的。
匿名類型作為嵌套定義,即在一個外部類(這里的類是指struct、union、class)的內部定義,則編譯器就在匿名類型定義之後定義一個無名變數,並把該匿名類型的數據成員的名字提升到匿名類的外部類的作用域內。
如果匿名類型是連續嵌套,則最內部的匿名類型的成員名字被提升到最外部的可用變數名字訪問的類的作用域內。