C 語言之結構

結構含義

結構有兩層含義:一層含義是“結構佈局”,結構佈局告訴編譯器如何表示數據,未讓編譯器爲數據分配空間。創建一個結構變量,即爲另一層含義。

建立結構聲明

#include<stdio.h>
struct stuff
{
	int number;
	char code[4];
	float cost;
};
int main(void)
{
	struct stuff library;   //創建了一個結構變量 library
	                        //編譯器使用 stuff 模板爲該變量分配空間
							//stuff book 相當於聲明中的 int 或 float
	                        //可定義多個變量,甚至是指向 struct stuff 類型的指針
	return 0;
}
  • 一個結構的內存分配

在這裏插入圖片描述

  • 就計算機而言,下面的聲明
struct stuff library;
//是以下聲明的簡化,聲明結構的過程和定義結構變量的過程組合成一個步驟
struct stuff
{
	int number;
	char code[4];
	float cost;
}library;

初始化結構

struct stuff library = {10,'c',12};
//訪問初始化後的中用結構成員運算符"."訪問成員
printf("%d", library.number);

結構數組聲明

struct book library[100]; //library 是一個數組名,不是結構名,數組中每個元素都是 struct book 類型的結構變量。
  • 一個結構數組的內存分配
    在這裏插入圖片描述

指向結構的指針

struct stuff* p;   //聲明並未創建一個新的結構,可以指向任意現有 stuff 類型的結構
p = &math         //如果 math 是 stuff 類型,結構名並不是結構地址,因此指向的結構前面要加上“&”

//指針訪問成員,以下等價
p->number == (*p).number == math.number 

typedef 關鍵字

利用 typedef 可以爲某一類型自定義名稱,通常用大寫字母表示定義的名稱,以提示用戶這個類型名實際上是一個符號的縮寫。與 #define 類似,但兩者有 3 處不同:

  1. tyoedef 創建的符號只受限於類型,不能用於值。
  2. typedef 由編譯器解釋,不是預處理器。
  3. 受限範圍內,typedef 比 #define 更靈活。
	typedef unsigned char BYTE; //爲現有類型創建一個名稱
	
	typedef char* STRING;   //把 STRING 解釋成類型的標識符,該類型是指向 char 的指針
	char* string;           //把 STRING 識別爲一個指向 char 的指針變量
	STRING name,sign;       //相當於 char* name,*sign
	
	typedef struct 
	{
		double x;
		double y;
	}rect;
	rect r1 = { 3.0,3.6 };  //被翻譯成 struct{double x;double y}r1 = {3.0,3.6};
	rect r2;                //被翻譯成 struct{double x;double y}r2;
	r2 = r1;                //C 認爲兩個結構的類型相同,所以賦值是有效操作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章