構造型別及結構體

2021-07-03 11:54:01 字數 2621 閱讀 8756

1)構造型別及結構體

a、c語言構造型別

構造資料型別:構造資料型別是根據已定義的乙個或多個資料型別用構造的方法來定義的。也就是說,乙個構造型別的值可以分解成若干個「成員」或「元素」。每個「成員」都是乙個基本資料型別或又是乙個構造型別。

在c語言中,構造型別有以下幾種:

陣列型別

結構體型別

共用體(聯合)型別

b、什麼是結構體?

在實際問題中,一組資料往往具有不同的資料型別。為了解決不同資料型別的儲存問題,c語言中給出了另一種構造資料型別----「結構」或叫「結構體」。

「結構」是一種構造型別,它是由若干「成員」組成的。每乙個成員都可以是乙個基本資料型別或者又是構造型別。

結構既是一種「構造」而成的資料型別,那麼在說明和使用之前必須先定義它,也就是構造他。如同在說明和呼叫函式之前要先定義函式一樣。

c、為什麼要有結構型別?

結構體可以把功能相同的資料組織起來,存在一起,用的時候方便,而且在呼叫函式的時候,若傳遞引數較多,傳乙個結構體相對而言簡單一些,很多系統自帶的函式必須用結構體。

2)定義結構體的方法

a、定義結構體的方法

定義結構體的一般形式為:

struct 結構名;

例如:定義乙個學生的結構體

struct student

成員列表由若干個成員組成,每個成員都是該結構的乙個組成部分,對每個成員也必須做型別說明。其形式為:

3)結構體變數及定義方法

a、結構體變數定義有三種方法

①先定義結構體,然後在定義結構體變數

例如:struct student

注意:a)結構體定義完成以後,計算機並不會給結構體分配記憶體空間

b)會在定義結構體變數後分配儲存空間。

結構體變數定義格式:

struct 結構體名 結構體變數名;

例如:struct student sut1;//表示定義乙個student型別結構體變數

struct student stu2,stu3,stu4;//定義多個結構體變數。

②定義結構體的同時定義結構體變數

格式:struct 結構體名結構體變數1,結構體變數2,結構體變數3...;

例如:struct studentstu5,stu6,stu7;//也是用student結構體定義了三個結構體變數

③使用匿名結構體來定義結構體變數

格式:struct 結構體變數1,結構體變數2,結構體變數3...;

例如:structcar1,car2,car3;

4)結構體變數中成員的訪問方法

a、結構變數中成員的訪問方法

在程式中,使用結構體變數時,往往不把它作為乙個整體來使用。

一般形式:

表示結構變數名.成員名

如:boy.name;

如果成員本身又是乙個結構體則必須逐級找到最低階的成員才能使用。

例如:boy1.birthday.month

即:第乙個人出生的月份成員可以再程式中單獨使用,與普通變數完全相同。

**示例:

struct car;//定義乙個car型別的結構體

struct car car1;//用結構體型別定義結構體變數

car1.pp;//獲取品牌

car1.lunzi;//獲取輪子

car1.speed;//獲取速度

5)結構體變數的初始化

a、先定義結構體變數,然後再初始化

struct stu;

struct stu boy1,boy2;

stu1.num=123;

strcpy(stu1.name,"zhangsan");

stu1.***='男';

stu1.score=88.8f;

b、定義的同時初始化

struct stu boy3=;

c、定義結構體的同時,還可以指定元素初始化

struct stu boy5=;

6)結構體變數儲存原理

a、結構體儲存原理

結構體占用的記憶體空間是每個成員占用的位元組數之和(考慮對齊問題);

b、結構體資料成員對齊的意義

簡化處理器與記憶體之間傳輸系統的設計

提公升讀取資料的速度。

c、結構體對齊的含義

結構體總長度

結構體內各資料成員的記憶體對齊,即該資料成員相對結構體的起始位置。

7)結構體變數占用儲存空間大小

a、結構體大小的計算方法和步驟

①將結構體內所有資料成員的長度值相加,記為sum_a;

②將各資料成員為了記憶體對齊,按各自對齊規模數而填充的位元組數累加到和sum_a上,記為sum_b。對齊模數是#pragma pack指定的數值以及該資料成員自身長度中數值較小者。該資料相對起始位置應該是對其模式的整數倍。

③將和sum_b向結構規模數對齊,該模數是#pargma pac指定的數值和結構體內部最大的基本資料型別成員長度中數值較小者。結構體的長度應該是該模數的整數倍。

所謂」對齊在n上「指定是」存放起始位址%n=0「

8)結構體作用域

a、作用域概述

結構體型別定義在函式內部的作用域與區域性變數的作用域是相同的

函式外部定義的結構體型別類似於全域性變數

b、作用域分類

結構體根據作用域可以分為全域性結構體、區域性結構體

語言 構造型別(結構體 列舉)

42.構造型別 構造資料型別 陣列型別 結構體型別 共用體 聯合 型別。43.結構體 結構 是一種構造型別,它是由若干 成員 組成的。每乙個成員可以時乙個基本資料型別或者又是乙個構造型別。結構體可以把功能相同的資料組織起來,存在一起,用的時候方便,而且在呼叫函式時,若傳遞引數較多,傳乙個結構體相對而...

C語言構造型別總結(共用體)

共用體又叫聯合,因為它的關鍵字是union,它的使用不像列舉和結構體那麼頻繁,但是作為c語言中一種資料型別,我們也有必要弄清它的用法.從前面的分析,我們知道結構體的總長度等於所有成員的和 當然還可能遇到記憶體對齊問題 共用體剛好與結構體不同,共用體所有成員共用一塊記憶體 順序從低位址開始存放,一次只...

C語言構造型別之共用體與列舉

常用於 查詢 定義 關鍵字 union 共用體名 模擬結構體 關鍵字struct 結構體名 共用體的記憶體大小只和最大的元素大小有關 共用體大部分操作和結構體一樣 共用體依然可以使用位元組對齊和位域 pragma pack 1 union message 關鍵字enum 列舉名 列舉本質為正整數型別...