亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言入門學習筆記之typedef簡介

 更新時間:2021年11月10日 15:43:47   作者:嵌入式@hxydj  
typedef為C語言的關鍵字,作用是為一種數(shù)據類型定義一個新名字,下面這篇文章主要給大家介紹了關于C語言入門學習筆記之typedef簡介的相關資料,需要的朋友可以參考下

在單片機和操作系統(tǒng)中 typedef 會經常用到,它可以為某一個類型自定義名稱。和#define比較類似。但是又有不同的地方。

  • typedef 創(chuàng)建的符號只能用于數(shù)據類型,不能用于值。而#define 創(chuàng)建的符號可以用于值。
  • typedef 是由編譯器來解釋,而不是預處理器。
  • typedef 使用起來更加靈活。

下面使用typedef定義一個數(shù)據類型

int main()
{
	typedef unsigned char BYTE;	
	BYTE c = 10;	
	printf("%d \r\n",c);
	
	system("pause");
	return 0;
}

使用typedef將unsigned char類型重新定義為BYTE類型,然后在使用新的類型BYTE定義一個變量c。輸出結果如下:

此時如果使用 #define 來替換,好像也可以。

這里使用 #define 將unsigned char替換為 BYTE好像也正確。

下面在看一個例子。

int main()
{
	typedef char * STR;		
	STR s1,s2;	
	s1="abc";
	s2="123";		
	printf("%s %s \r\n",s1,s2);	
	system("pause");
	return 0;
}

將字符指針 char * 重新定義為STR類型,然后使用STR定義兩個指針s1和s2,這樣s1和s2都是指向字符的指針。接著給這兩個指針賦值,然后打印出來。

這時使用 #define 來替換 typedef 的功能。

#define STR  char *
int main()
{
	STR s1,s2;	
	s1="abc";
	s2="123";	
	printf("%s %s \r\n",s1,s2);	
	system("pause");
	return 0;
}

這時候編譯程序的時候,程序會報錯。

這時為什么呢?因為使用typedef的時候,是定義了一個新的數(shù)據類型。

typedef char * STR;		
STR s1,s2;	

相當于

char *s1, *s2;
s1="abc";
s2="123";	

s1和s2都是指向字符類型的指針。

如果使用 #define 的時候,系統(tǒng)只是簡單的替換。

#define STR  char *
STR s1,s2;	

將STR用 char * 進行替換

	char *s1,s2;	
	s1="abc";
	s2="123";	

替換后只有s1是指針,s2依然是一個char類型的變量。所以給s2賦值一個字符串的時候系統(tǒng)就會報錯。因此要重新定義一個數(shù)據類型的時候,要使用typedef,這個在定義結構體的時候使用的非常多。

typedef struct Date
{
	int year;
	int month;
	int day;
} DT;

使用typedef 將結構體 struct Date 重新定義為DT類型,這樣在使用DT定義變量的時候,就相當于使用了 struct Date 來定義變量。

typedef struct Date
{
	int year;
	int month;
	int day;
} DT;

DT d1 = {2021,10,1};
DT d2 = {2021,10,10};

等價于

struct Date
{
	int year;
	int month;
	int day;
};
struct Date d1 = {2021,10,1};
struct Date d2 = {2021,10,10};

這樣通過使用 typedef 來重新定義一個新的類型,使代碼寫起來更加的簡潔。這種方法在單片機的庫函數(shù)中使用的最多。

typedef struct
{
    uint16_t GPIO_Pin;          
    GPIOSpeed_TypeDef GPIO_Speed; 
    GPIOMode_TypeDef GPIO_Mode;    
}GPIO_InitTypeDef;

void LED_Init(void)
{ 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;				 			//LED0-->PA8 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		  //推挽輸出
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		  //IO口速度為50MHz
 	GPIO_Init(GPIOA, &GPIO_InitStructure);					 				/PD2 輸出高 
}

通過 typedef 將結構體重定義為GPIO_InitTypeDef 類型,這樣在初始化的時候,直接使用GPIO_InitTypeDef 類型就可以定義一個關于GPIO的結構體。

在定義數(shù)據類型的時候,也會用到 typedef 重新定義一個數(shù)據類型。

通過tepedef 定義新的數(shù)據類型,增加了代碼的可讀性和移植性。這里說的新的數(shù)據類型不是創(chuàng)建了一個系統(tǒng)不存在的數(shù)據類型,而是給已經存在的某個類型增加了一個方便使用的標簽。而這個標簽又不同于 #define 只是簡單的符號替換。

總結

到此這篇關于C語言入門學習筆記之typedef簡介的文章就介紹到這了,更多相關C語言typedef簡介內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談C++內存分配及變長數(shù)組的動態(tài)分配

    淺談C++內存分配及變長數(shù)組的動態(tài)分配

    下面小編就為大家?guī)硪黄獪\談C++內存分配及變長數(shù)組的動態(tài)分配。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • C++實現(xiàn)LeetCode(107.二叉樹層序遍歷之二)

    C++實現(xiàn)LeetCode(107.二叉樹層序遍歷之二)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(107.二叉樹層序遍歷之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • 解析C語言中位字段內存分配的問題

    解析C語言中位字段內存分配的問題

    本篇文章是對C語言中位字段內存分配的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • Qt圖片繪圖類之QPixmap/QImage/QPicture詳解

    Qt圖片繪圖類之QPixmap/QImage/QPicture詳解

    這篇文章主要為大家詳細介紹了Qt圖片繪圖類中QPixmap、QImage和QPicture的使用方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • rapidjson解析json代碼實例以及常見的json core dump問題

    rapidjson解析json代碼實例以及常見的json core dump問題

    今天小編就為大家分享一篇關于rapidjson解析json代碼實例以及常見的json core dump問題,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • 在C/C++與Python之間實現(xiàn)通信的常見方法

    在C/C++與Python之間實現(xiàn)通信的常見方法

    在C/C++與Python之間實現(xiàn)通信的方式有很多,本文給大家介紹了一些常見的方法,文中通過代碼示例介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • C語言快速實現(xiàn)掃雷小游戲

    C語言快速實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • 基于C語言的庫封裝發(fā)布技術詳解

    基于C語言的庫封裝發(fā)布技術詳解

    在編程的過程中,使用已經封裝好的庫函數(shù)是十分方便的,也是十分高效的,這篇文章主要給大家介紹了關于C語言庫的封裝和使用的相關資料,需要的朋友可以參考下
    2021-08-08
  • C語言單鏈表遍歷與求和示例解讀

    C語言單鏈表遍歷與求和示例解讀

    我們在學習編程的過程中,雖然有些語法很簡單,但是我們還是要做多題。不做題是發(fā)現(xiàn)不了問題的,發(fā)現(xiàn)問題我們就可以“對癥下藥”,進行查漏補缺了。刷題可以先從簡單題開始刷,熟練之后再做一些可以提升自己能力的題
    2022-07-07
  • C語言數(shù)據結構中約瑟夫環(huán)問題探究

    C語言數(shù)據結構中約瑟夫環(huán)問題探究

    這篇文章主要介紹了C語言數(shù)據結構中約瑟夫環(huán)問題,總的來說這并不是一道難題,那為什么要拿出這道題介紹?拿出這道題真正想要傳達的是解題的思路,以及不斷優(yōu)化探尋最優(yōu)解的過程。希望通過這道題能給你帶來一種解題優(yōu)化的思路
    2023-01-01

最新評論