Ⅰ c語言的結構體類型是什麼數據數據有哪些類型
結構體類型就是以struct關鍵字定義的數據類型。
結構體(struct)是由一系列具有相同類型或不同類型的數據構成的數據集合,也叫結構。是一種聚合類型,裡面可以包含多種數據類型,甚至可以結構體里嵌套結構體。相信我,等你深入理解了C言語之後,結構體在C語言里是一個神器。
Ⅱ c語言結構體
C語言結構體定義:struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
結構體是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(2)c語言結構體類型對照表擴展閱讀
1、struct是聲明結構體類型時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。
2、structSTUDENT是定義的數據類型的名字,它向編譯系統聲明這是一個「結構體類型」,包括name、num、sex、age、score、addr等不同類型的項。
3、structSTUDENT與系統提供的int、char、float、double等標准類型名一樣,都是數據類型,具有同樣的作用,都是用來定義變數的。
Ⅲ 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,浮點型變數。
應注意在括弧後的分號是必不可少的。
Ⅳ c語言中構造類型有幾種分別是什麼
C語言中構造類型一共有4種,它們分別是數組、結構體(struct)、共用體(union)、枚舉類型(enum)。
C語言中基本類型和枚舉類型,統稱算術類型(arithmetic type)。算術類型和指針類型,統稱為標量類型(scalar type)。
數組類型和結構類型被統稱為聚合類型(aggregate type)。聯合類型(union type)不被認為是聚合類型,因為在任一時刻下,聯合中只有一個成員可以具有值。
(4)c語言結構體類型對照表擴展閱讀:
C語言的主要特點:
C語言是一種結構化語言,它有著清晰的層次,可按照模塊的方式對程序進行編寫,十分有利於程序的調試,且c語言的處理和表現能力都非常的強大。
依靠非常全面的運算符和多樣的數據類型,可以輕易完成各種數據結構的構建,通過指針類型更可對內存直接定址以及對硬體進行直接操作,因此既能夠用於開發系統程序,也可用於開發應用軟體。
1、簡潔的語言,C語言包含的各種控制語句僅有9種,關鍵字也只有32 個,程序的編寫要求不嚴格且以小寫字母為主,對許多不必要的部分進行了精簡。
語句構成與硬體有關聯的較少,且C語言本身不提供與硬體相關的輸入輸出、文件管理等功能,如需此類功能,需要通過配合編譯系統所支持的各類庫進行編程,故C語言擁有非常簡潔的編譯系統。
2、具有結構化的控制語句,C語言是一種結構化的語言,提供的控制語句具有結構化特徵,如for語句、if⋯else語句和switch語句等。可以用於實現函數的邏輯控制,方便麵向過程的程序設計。
3、豐富的數據類型,C語言包含的數據類型廣泛,不僅包含有傳統的字元型、整型、浮點型、數組類型等數據類型,還具有其他編程語言所不具備的數據類型,其中以指針類型數據使用最為靈活,可以通過編程對各種數據結構進行計算。
Ⅳ C語言中的常用的幾種系統時間結構體類型
在C語言涉及中經常需要定時觸發事件,涉及到獲取系統時間,其結構體類型有多種。Unix/Linux系統下有以下幾種時間結構:
1、time_t 類型:長整型,一般用來表示從1970-01-01 00:00:00時以來的秒數,精確度:秒;由函數time()獲取;
該類型定義在頭文件 /usr/include/sys/time.h 中:
#define _TIME_T
typedef long time_t;
#endif
函數定義:time_t time(time_t* lpt);
如:time_t time = time(NULL);
2、struct timeb 結構:它有兩個主要成員,一個是秒,另一個是毫秒;精確度:毫秒(10E-3秒);
由函數ftime()獲取struct timeb結構的時間;其定義如下:
struct timeb
{
time_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
#include <sys/timeb.h>
int ftime(struct timeb* tp);
調用成功返回0;調用失敗返回-1;
3、struct timeval 結構,它有兩個成員;一個是秒,另一個表示微秒,精確度:微秒(10E-6);
由函數gettime0fday()獲取;
struct timeval結構定義為:
struct timeval
{
long tv_sec;
long tv_usec;
}
讀取struct timeval結構數據的函數說明:
#include <sys/time.h>
int gettimeofday(struct timeval* tv,struct timezone* tz);
該函數會提取系統當前時間,並把時間分為秒和微秒兩部分填充到結構struct timeval中;同時把當地的時區信
息填充到結構struct timezone中;
返回值:成功則返回0,失敗返回-1,錯誤代碼存於errno。附加說明EFAULT指針tv和tz所指的內存空間超出存
取許可權。
struct timezone結構的定義為:
struct timezone
{
int tz_minuteswest;
int tz_dsttime;
}
上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下
DST_NONE
DST_USA
DST_AUST
DST_WET
DST_MET
DST_EET
DST_CAN
DST_GB
DST_RUM
DST_TUR
DST_AUSTALT
4、struct timespec 結構:它是POSIX.4標準定義的一個時間結構,精確度:納秒(10E-9秒);
由函數gethrestime()或gethrestime_lasttick()獲取當前系統struct timespec結構的時間;其定義如下:
struct timespec
{
time_t tv_sec;
long tv_nsec;
};
typedef struct timespec timespec_t;
該結構定義在頭頭文件 /usr/include/sys/time_impl.h 中;
extern void gethrestime(timespec_t*);
extern void gethrestime_lasttick(timespec_t*);
5、clock_t 類型:由函數clock()獲取;
#include <time.h>
clock_t clock(void);
該函數以微秒的方式返回CPU的時間;
類型 clock_t 定義在頭文件/usr/include/sys/types.h中:
#ifndef _CLOCK_T
#define _CLOCK_T
typedef long clock_t;
#endif
6、struct tm 結構:由函數gmtime()解析time_t得到
struct tm*gmtime(const time_t*timep);
函數說明:gmtime()將參數timep 所指的time_t 結構中的信息轉換成真實世界所使用的時間日期表示方法,然後
將結果由結構tm返回。
結構tm的定義為
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
int tm_sec 代表目前秒數,正常范圍為0-59,但允許至61秒
int tm_min 代表目前分數,范圍0-59
int tm_hour 從午夜算起的時數,范圍為0-23
int tm_mday 目前月份的日數,范圍01-31
int tm_mon 代表目前月份,從一月算起,范圍從0-11
int tm_year 從1900 年算起至今的年數
int tm_wday 一星期的日數,從星期一算起,范圍為0-6
int tm_yday 從今年1月1日算起至今的天數,范圍為0-365
int tm_isdst 日光節約時間的旗標
此函數返回的時間日期未經時區轉換,而是UTC時間。
返回值:返回結構tm代表目前UTC 時間
7、Unix對時間單位的定義:
#define SEC 1 // 秒
#define MILLISEC 1000 // 毫秒
#define MICROSEC 1000000 // 微秒
#define NANOSEC 1000000000 // 納秒
8、時間格式化函數:
size_t strftime(char *str,size_t max,char *fmt,struct tm *tp); strftime有點像sprintf,其格式由fmt來指定。
%a : 本第幾天名稱,縮寫
%A : 本第幾天名稱,全稱
%b : 月份名稱,縮寫
%B : 月份名稱,全稱
%c : 與ctime/asctime格式相同
%d : 本月第幾日名稱,由零算起
%H : 當天第幾個小時,24小時制,由零算起
%I : 當天第幾個小時,12小時制,由零算起
%j : 當年第幾天,由零算起
%m : 當年第幾月,由零算起
%M : 該小時的第幾分,由零算起
%p : AM或PM
%S : 該分鍾的第幾秒,由零算起
%U : 當年第幾,由第一個日開始計算
%W : 當年第幾,由第一個一開始計算
%w : 當第幾日,由零算起
%x : 當地日期
%X : 當地時間
%y : 兩位數的年份
%Y : 四位數的年份
%Z : 時區名稱的縮寫
%% : %符號
char * strptime(char *s,char *fmt,struct tm *tp); 如同scanf一樣,解譯字串成為tm格式
%h : 與%b及%B同
%c : 讀取%x及%X格式
%C : 讀取%C格式
%e : 與%d同
%D : 讀取%m/%d/%y格式
%k : 與%H同
%l : 與%I同
%r : 讀取"%I:%M:%S %p"格式
%R : 讀取"%H:%M"格式
%T : 讀取"%H:%M:%S"格式
%y : 讀取兩位數年份
%Y : 讀取四位數年份
希望可以幫到你,謝謝!
Ⅵ C語言的數據類型分為幾種
short、int、long、char、float、double
這六個關鍵字代表C 語言里的六種基本數據類型。
在不同的系統上,這些類型占據的位元組長度是不同的:
在32
位的系統上
short
占據的內存大小是2 個byte;
int占據的內存大小是4
個byte;
long占據的內存大小是4
個byte;
float占據的內存大小是4
個byte;
double占據的內存大小是8
個byte;
char占據的內存大小是1
個byte。
具體可以用sizeof測試一下即可。
(6)c語言結構體類型對照表擴展閱讀:
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
Ⅶ c語言的數據類型包括哪些
C語言的數據類型包括:基本類型、構造類型、指針類型、空類型。
其中構造類型中包括共用體、數組、結構體三種類型。基本類型中還包括整型、浮點型、字元型和枚舉型四種類型。
1、基本類型,也就是C語言中的基礎類型,其中包括整數類型、字元型、浮點型、枚舉類型。
2、構造類型,就是使用基本類型的數據,或者使用已經構造好的數據類型,進行添加、設計構造出新的數據類型,使其設計的新構造類型滿足待解決問題所需要的數據類型。它並不像基本類型那樣簡單,而是由多種類型組合而成的新類型,其中每一組成部分稱為構造類型的成員。
構造類型也包括三種形式:數組類型、結構體類型和共用體類型。
3、指針類型,C語言的精華是指針,指針類型不同於其他類型的特殊性在於:指針的值表示的是某個內存地址。
4、空類型,關鍵字是void,其主要作用在於:對函數返回的限定;對函數參數的限定。也就是說,一般一個函數都具有一個返回值,將其值返回調用者,這個返回值是具有特定的類型,但是當函數不必返回一個值時,就可以使用空類型設定返回值的類型。
c語言
C語言是一門面向過程、抽象化的通用程序設計語言,主要用於底層開發。以簡易的方式編譯,並處理低級存儲器。C語言支持跨平台操作,一個標準的C語言程序可以在許多計算機平台上進行編譯。
Ⅷ c語言的基本類型數據有哪幾種
1、整型int2(或4)同短整型(或長整型)
2、短整型short2-32768~32767
3、長整型long4-2的31次方~2的31次方-1
4、無符號整型unsigned[int]2(或4)同無符號短整型(長整型)
5、無符號短整型unsignedshort20~65535(0~2的16次方-1)
6、無符號長整型unsignedlong40~2的32次方-1
7、單精度實型float4-10的38次方~10的38次方
8、雙精度實型double8-10的308次方~10的308次方
9、字元型char1-128~127
(8)c語言結構體類型對照表擴展閱讀
unsignedlong的使用
例:
#include<cstdio>
intmain()
{
unsignedintui=-1;
unsignedlongul=-1;
unsignedlonglongull=-1;
size_tst=-1;
printf("ui=%u,ul=%lu,ull=%llu,st=%zu ",ui,ul,ull,st);
return0;
}
Ⅸ 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語言中的結構體
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。 結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。 structtag{member-list}variable-list;在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。以下為示例: //此聲明聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c//同時又聲明了結構體變數s1//這個結構體並沒有標明其標簽struct{inta;charb;doublec;}s1;//同上聲明了擁有3個成員的結構體,分別為整型的a,字元型的b和雙精度的c//結構體的標簽被命名為SIMPLE,沒有聲明變數structSIMPLE{inta;charb;doublec;};//用SIMPLE標簽的結構體,另外聲明了變數t1、t2、t3structSIMPLEt1,t2[20],*t3;//也可以用typedef創建新類型typedefstruct{inta;charb;doublec;}Simple2;//現在可以用Simple2作為類型聲明新的結構體變數Simple2u1,u2[20],*u3;在上面的聲明中,第一個和第二聲明被編譯器當作兩個完全不同的類型,即使他們的成員列表是一樣的,如果令t3=&s1,則是非法的。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體類型的指針,而通常這種指針的應用是為了實現一些更高級的數據結構如鏈表和樹等。 //此結構體的聲明包含了其他的結構體structCOMPLEX{charstring[100];structSIMPLEa;};//此結構體的聲明包含了指向自己類型的指針structNODE{charstring[100];structNODE*next_node;};如果兩個結構體互相包含,則需要對其中一個結構體進行不完整聲明,如下所示: structB;//對結構體B進行不完整聲明//結構體A中包含指向結構體B的指針structA{structB*partner;//othermembers;};//結構體B中包含指向結構體A的指針,在A聲明完後,B也隨之進行聲明structB{structA*partner;//othermembers;}; 結構體和其他類型基礎數據類型一樣,例如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值的大小將不產生任何效果。