typedef用法总结。

引用贴:http://www.cnblogs.com/csyisong/archive/2009/01/09/1372363.html

首先#define为预处理,与typedef是完全不同的机制。详细机制尚未完全明了。请参考前人文章。

用法一:指针变量代替。

char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针,和一个字符变量

typedef char* PCHAR;  // 别名不建议全大写

PCHAR pa, pb;   // 这是两个char类型的指针。

原文认为这种方法很有用。但个人认为这种方法容易引起误解。如果要使用,需要在变量名中有指针的隐含指示。

用法二:struct的使用省略。

struct tagPOINT1

{
    int x;

int y; 
};

struct tagPOINT1 p1;

如果使用typedef,则可以这样:

typedef struct tagPOINT
{
    int x;

int y;
}POINT;

POINT p1; // 这样就比原来的方式少写了一个struct。不建议使用此方式。但需要能够理解他人代码中这样的使用。

用法三:用typedef来定义与平台无关的类型。(个人认为最常用的用法)

REAL代表最高精度的浮点数。

typedef long double REAL;  //最高支持lond double 平台

typedef double REAL;//最高支持double 平台

typedef float REAL;//最高支持float 平台

也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。

用法四:对类,定义一个容易理解的别名。

例子1:

class ABC{ /*code*/ };

typedef ABC Rectangle;

你看到ABC肯定不知道这个类是做什么用的。但当你看到Rectangle最少你应该知道这个类是一个矩形。

PS:不建议任何人构建ABC这种类。但你无法控制所有人。所以有时候Typedef是一个很好的选择。

例子2:

template< class typeA > class ABC{ /* code */ };

typedef < calss AAA >ABC  RectangleA;

typedef < calss BBB >ABC  RectangleB;

此例子中变量名非常不推荐。因此为上份工作的代码。所以只能使用AAA和BBB代替。但从中应该也能看到用法。

用法五:函数指针的别名。

格式:typedef  返回类型(*新类型)(参数表)

typedef char (*ptrFun)(int);

ptrFun pFun;

char getInt(int a){ return a;}

int main()

{

  pFun = getInt;

  cout<< (*pFun)(2) << endls;

  return 0;

}

暂未使用此方式来编写代码。但存在即合理。本质上,和类的别名无什么区别。

一个未试验的猜想:是否可以将 *ptrFun 变为 ptrFun ?

解答原文的一个问题:(仅个人认知,不代表绝对正确。欢迎讨论)

原文案例:

typedef char * pStr;

char string[4] = "abc";

const char *p1 = string;

const pStr p2 = string;

p1++;

p2++;

原文中,指出P2++将会出错。

1:pStr是一个自定义的类型,在前面加const将会使我们无法改变这个类型的值。

2:反推论,这个pStr是保存的是一个指针。具体内容为指针地址。当对指针地址进行++时,会改变具体内容。所以报错。

时间: 2024-11-06 02:31:52

typedef用法总结。的相关文章

C++ typedef用法小结 (※不能不看※)

C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量:以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,

转 C/C++基础知识:typedef用法小结

第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量: 以下则可行: typedef char* PCHAR; // 一般用大写 PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针 虽然: char *pa, *pb; 也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typed

C++ typedef用法小结 (转)

第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量:以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省

typedef用法

引言 typedef 声明,简称 typedef,为现有类型创建一个新的名字.比如人们常常使用 typedef 来编写更美观和可读的代码.所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性.在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明. typedef的使用方法如下: typedef existing_type new_type_name ; 注意:typedef

C/C++ typedef用法

引言 typedef 声明,简称 typedef,为现有类型创建一个新的名字.比如人们常常使用 typedef 来编写更美观和可读的代码.所谓美观,意指 typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性. 在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明. typedef的使用方法如下: typedef existing_type new_type_name ; 注意:typede

【转】typedef用法

用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如: char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量: 以下则可行: typedef char* PCHAR; PCHAR pa, pb; 这种用法很有用,特别是char* pa, pb的定义,初学者往往认为是定义了两个字符型指针,其实不是,而用typedef char* PCHAR就不会出现这样的问题,减少了错误的发生. 用途二:用在旧的C

C++ typedef用法小结

  第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量:以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式

C语言 typedef用法

#include <stdio.h> #include<string.h> typedef int huang; //typedef定义一个数据类型,将huang 变为整型, int main() { huang a=57; //后期用 huang定义的都是整型 printf("%d\n",a); return 0; }

Typedef 用法

typedef声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法. 不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用typedef避免缺欠,从而使代码更健壮. typedef声明,简称typedef,为现有类型创建一个新的名字.比如人们常常使用 typedef 来编写更美观和可读的代码. 所谓美观,意指typedef 能隐藏笨拙的语法构造以及平台相关的数据类型,从而增强可移植性和以及未来的可维护性. 本文下面将竭尽全力来揭示 typedef 强大功能以及如