当前位置:   article > 正文

C\C++_关键字_typedef使用场景_typedef std::array

typedef std::array

1. 重命名结构体名称

typedef struct Person
{
	char name[20];
	int age;
}MyPerson;
  • 1
  • 2
  • 3
  • 4
  • 5

2. 重命名指针

typedef char * PCHAR;

void Test01()
{
	char *p1, *p2;
	cout << typeid(p1).name() << endl;
	cout << typeid(p2).name() << endl;
	
	PCHAR p3, p4;
	cout << typeid(p3).name() << endl;
	cout << typeid(p4).name() << endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3. 重命名数据类型,增强跨平台程序的可移植性

typedef long long MyLongLongType;  //就是当其它平台没有long long 这个数据类型的时候,可以在该处直接更改,而不需要更改几千行甚至几万行代码中所涉及到的所有的long long类型

void Test02()
{
	MyLongLongType llAge = 10;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4. 定义数组指针

//********************【数组指针】:它是指针,指向数组的指针**********************************。
//数组的类型由元素类型和数组大小共同决定:int array[5]  的类型为  int[5];C语言可通过typedef定义一个数组类型:

void _cdecl Test01()
{
	int arr[] = { 1, 2, 3, 4, 5 };
	
	//定义一个数组类型ARRAY_TYPE,可以把int arr[5]看成一个整体、一个ARRAY_TYPE类型的变量
	typedef int(ARRAY_TYPE)[5]; 
	ARRAY_TYPE myArr;
	for (int i = 0; i < 5; i++)
	{	
		myArr[i] = i + 10;
	}
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n", myArr[i]);
	}

	//对数组名取地址代表指向整个数组的指针
	//1. *pArr 表示拿到pArr指针指向的整个数组(即数组名,代表数组首地址)
	ARRAY_TYPE *pArr = &myArr;
	pArr = &arr;
	for (int i = 0; i < 5; i++)
	{
		printf("%d\n", *(*pArr + i));
	}
	
	//2. 直接定义数组指针类型 ,可以把int arr[5]看成一个整体、一个(*ARRAY_POINTER)类型的变量,所以ARRAY_POINTER指针即指向该类型变量,即指向整个数组;*ARRAY_POINTER就是拿到整个数组(数组名)
	typedef int(*ARRAY_POINTER)[5];
	ARRAY_POINTER pArray = &arr;

	//3. 直接定义数组指针类型
	int(*pArrParam)[5] = &arr;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

5. 为类模板的具体化指定别名

typedef std::array<double, 12> DArr;
DArr arr;  //< arr 是std::array<double, 12> 类型
  • 1
  • 2
  • c++11 新增了一项功能——使用模板提供一系列额别名
template<typename T> 
  using ArrType = std::array<T,12>;
  
ArrType<int> nArr; 		//<	是std::array<int, 12> 类型
ArrType<double> dArr; 	//<	是std::array<double, 12> 类型
  • 1
  • 2
  • 3
  • 4
  • 5
  • c++11也允许将语法using=用于非模板,用于非模板时,这种语法与常规typedef等价:
typedef const char* pc1;
using pc2 = const char*;
typedef const int *(*pal)[10];
using pa2 = const int *(*)[10];
  • 1
  • 2
  • 3
  • 4

6. 定义二维数组

namespace jj01
{
	const int g_nNumRows = 256;
	const int g_nNumCols = 1024;

	// Declare the contents of a single cell in the spreadsheet
	typedef struct 
	{ 
		int	dwValue;
		char  bDummy[16]; 
	} CELL, *PCELL;

	//! Declare the data type for an entire spreadsheet
	//! 把SPREADSHEET定义成包含256*1024个结构体CELL元素的类型
	typedef CELL SPREADSHEET[g_nNumRows][g_nNumCols];	
	typedef SPREADSHEET *PSPREADSHEET;

	void Test01()
	{
		//! 即256*1024个结构体CELL元素
		PCELL pc = new CELL[g_nNumRows*g_nNumCols*sizeof(CELL)];
		PSPREADSHEET ps = (PSPREADSHEET)pc;	
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/952149
推荐阅读
相关标签
  

闽ICP备14008679号