最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語(yǔ)言入門學(xué)習(xí)筆記之typedef簡(jiǎn)介

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

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

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

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

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

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

此時(shí)如果使用 #define 來(lái)替換,好像也可以。

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

下面在看一個(gè)例子。

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定義兩個(gè)指針s1和s2,這樣s1和s2都是指向字符的指針。接著給這兩個(gè)指針賦值,然后打印出來(lái)。

這時(shí)使用 #define 來(lái)替換 typedef 的功能。

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

這時(shí)候編譯程序的時(shí)候,程序會(huì)報(bào)錯(cuò)。

這時(shí)為什么呢?因?yàn)槭褂胻ypedef的時(shí)候,是定義了一個(gè)新的數(shù)據(jù)類型。

typedef char * STR;		
STR s1,s2;	

相當(dāng)于

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

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

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

#define STR  char *
STR s1,s2;	

將STR用 char * 進(jìn)行替換

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

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

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

使用typedef 將結(jié)構(gòu)體 struct Date 重新定義為DT類型,這樣在使用DT定義變量的時(shí)候,就相當(dāng)于使用了 struct Date 來(lái)定義變量。

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

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

等價(jià)于

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

這樣通過(guò)使用 typedef 來(lái)重新定義一個(gè)新的類型,使代碼寫起來(lái)更加的簡(jiǎn)潔。這種方法在單片機(jī)的庫(kù)函數(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 輸出高 
}

通過(guò) typedef 將結(jié)構(gòu)體重定義為GPIO_InitTypeDef 類型,這樣在初始化的時(shí)候,直接使用GPIO_InitTypeDef 類型就可以定義一個(gè)關(guān)于GPIO的結(jié)構(gòu)體。

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

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

總結(jié)

到此這篇關(guān)于C語(yǔ)言入門學(xué)習(xí)筆記之typedef簡(jiǎn)介的文章就介紹到這了,更多相關(guān)C語(yǔ)言typedef簡(jiǎn)介內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)餐飲管理與點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C語(yǔ)言指針筆試題全面解析

    C語(yǔ)言指針筆試題全面解析

    這篇文章主要介紹了C語(yǔ)言指針筆試題全面解析,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價(jià)值。需要的朋友可以了解下。
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)投票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • QT實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器

    QT實(shí)現(xiàn)簡(jiǎn)單音樂(lè)播放器

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)簡(jiǎn)單的音樂(lè)播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • 用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī)

    用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī)

    這篇文章主要介紹了用C語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的虛擬機(jī),其中棧數(shù)組的部分非常值得學(xué)習(xí),需要的朋友可以參考下
    2015-07-07
  • Matlab控制電腦攝像實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè)和識(shí)別詳解

    Matlab控制電腦攝像實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè)和識(shí)別詳解

    人臉識(shí)別過(guò)程主要由四個(gè)階段組成:人臉檢測(cè)、圖像預(yù)處理、面部特征提取和特征識(shí)別。這篇文章主要介紹了如何使用MATLAB控制筆記本電腦的攝像頭,并進(jìn)行實(shí)時(shí)人臉檢測(cè)和識(shí)別,需要的可以參考一下
    2022-10-10
  • c++11中std::move函數(shù)的使用

    c++11中std::move函數(shù)的使用

    本文主要介紹了c++11中std::move函數(shù)的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Visual Studio調(diào)試C/C++教程指南

    Visual Studio調(diào)試C/C++教程指南

    VisualStudio是微軟開發(fā)的一款集成開發(fā)環(huán)境軟件,本文主要介紹了Visual Studio調(diào)試C/C++教程指南,熟悉地掌握基于VS的C/C++調(diào)試技術(shù),可以大幅提升調(diào)試性能,感興趣的可以了解一下
    2024-06-06
  • C++實(shí)現(xiàn)Matlab的zp2tf函數(shù)的示例代碼

    C++實(shí)現(xiàn)Matlab的zp2tf函數(shù)的示例代碼

    matlab?的?zp2tf?函數(shù)的作用是將極點(diǎn)形式的?H(s)?函數(shù)的分母展開,本文主要為大家介紹了C++實(shí)現(xiàn)Matlab的zp2tf函數(shù)示例代碼,需要的可以參考一下
    2023-04-04
  • Qt使用QCamera實(shí)現(xiàn)切換相機(jī),分辨率和圖像捕獲功能

    Qt使用QCamera實(shí)現(xiàn)切換相機(jī),分辨率和圖像捕獲功能

    這篇文章主要為大家介紹了如何利用Qt中的相機(jī)類QCamera,取景器類QCameraViewfinder,圖像捕獲類QCameraImageCapture實(shí)現(xiàn)切換相機(jī)、分辨率和圖像捕獲功能,需要的可以了解一下
    2023-04-04

最新評(píng)論

宁强县| 胶南市| 三门峡市| 大埔区| 邳州市| 七台河市| 阳春市| 若羌县| 贵南县| 五河县| 河南省| 观塘区| 桦甸市| 昌宁县| 西城区| 陕西省| 嘉峪关市| 吉木萨尔县| 股票| 裕民县| 宜兰县| 宁南县| 隆子县| 大方县| 汉寿县| 锡林郭勒盟| 呼玛县| 靖安县| 古交市| 英山县| 文成县| 酒泉市| 循化| 如皋市| 克拉玛依市| 明光市| 驻马店市| 泾川县| 广南县| 庆阳市| 南投县|