C和C++中的typedef的作用

C和C++中的typedef的作用

C和C++中的typedef的作用是定义一个类型的别名。其用法如下: 
  (1)typedef int Elemtype;基本用法 作用是定义int的别名Elemtype。 
  (2)typedef int arr[100]; 定义一个数组的别名arr,arr的类型是长度为100的整型数组,此后用arr定义的都是长度为100的int数组。
  (3)typedef struct node{ }Node; 定义一个结构体的别名,此后可以用Node代替struct node定义结构体变量。
  (4)typedef int (*pf)(int); 定义一个指针类型的别名pf,此后pf定义的都是指向函数的指针,且只能指向有一个int型参数的类型为int型函数。
  int fun(int x) 
  { 
  return x; 
  } 
  pf p; 
  p=fun; 
  (5)typedef int* (*pf)(int); 定义一个指针类型的别名pf,此后pf定义的都是指向函数的指针,且只能指向有一个int型参数的类型为int *的函数。
  int* fun(int x) 
  { 
  return &x; 
  } 
  pf p; 
  p=fun

从typedef别名的作用域看C++与C的安全性区别(转)


以前我知道可以用typedef来为类型起个别名,如“typedef long INDEX;”。给long这样的类型起别名主要目的不是简化程序的书写,它有两个用处:一是表明该类型的特殊作用,二是将来有可能要改变这种类型(比如提高精度),如果直接声明为long型则失去了程序的可惟护性——每一个变量的声明都要改动;而声明为INDEX则使维护程序变得十分简单——只要改一下typedef语句即可。
  然而今天我才发现,这么长时间以来我一直是“只知其一不知其二”,今天才发现这个语句也可以在类里面定义,表示这个类型别名只在本类里面起作用。
class MyClass
{
public:
  typedef long INDEX;
...
};
  如果该语句放在public段中,则可以在类外部使用,比如:
MyClass::INDEX usercode;//声明一个变量
  而如果放在private段中,则只能在类内使用。
  以往我也经常用typedef,但是从来没有在类里面用过。今天算是学了一招了。C++引入“仅在类内部起作用的类型别名”的初衷应该不难理解:通过限制该类型别名的作用域来防止冲突。比如同样表示长度,可能有的类中只须char即可,有的类中要用int,而有的类可能连long都嫌小。那么,我一概起个别名叫“size”,不同的类中有不同的定义。于是,下面的声明语句就足以避免冲突而且易于理解:
MyClass::size

MyClass::GetSize() const;
  进而,我试验了一下在函数体内部typedef,果然这个别名在函数体以外不可以使用,也就是说,“类型别名”和变量、函数一样具有作用域。
  

时间: 2024-08-28 11:53:45

C和C++中的typedef的作用的相关文章

C/C++中关键字typedef的理解还是没有到位

正常情况:前面的数据库操作会被执行,而发生数据库操作错误开始及之后的所有的数据保存操作都将失败.这样子应该都不是我们要的结果吧. 运行中会下载镜像python:2.7和扩展Flask.Redis,会比较慢.下载扩展如果失败,可以重新再试一次. 跟之前index一样,我们这里的数据也是从js拿过来,不过这里是从detail.js拿的,但是这个时候detail.js中的data是没有数据的,因为我们希望数据是从index列表的每一项点击时传过来的,而不是我们直接写到detail.js里面的,这个时候

FAQ: Python中if __name__ == '__main__':作用

#hello.pydef sayHello(): str="hello" print(str); if __name__ == "__main__": print ('This is main of module "hello.py"') sayHello() python作为一种脚本语言,我们用python写的各个module都可以包含以上那么一个类似c中的main函数,只不过python中的这种__main__与c中有一些区别,主要体现在:

Linux内核中的jiffies及其作用介绍及jiffies等相关函数详解

在LINUX的时钟中断中涉及至二个全局变量一个是xtime,它是timeval数据结构变量,另一个则是jiffies,首先看timeval结构struct timeval{time_t tv_sec; /***second***/susecond_t tv_usec;/***microsecond***/}到底microsecond是毫秒还是微秒?? 1秒=1000毫秒(3个零),1秒=1000 000微秒(6个零),1秒=1000 000 000纳秒(9个零),1秒=1000 000 000

iOS中关于字符 “&”的作用?

如NSFileManager中关于判断是否目录的 iOS中关于字符 "&"的作用? >> ios 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/ios/1010000008969096/iOS中关于字符amp的作用.html

C++中减去‘0’的作用( -'0' )

我们在日常研(chao)究(xi)大佬们的代码时,可能会遇到减去字符'0'的情况,比如下图,这种语法问题吧说简单它不那么简单,毕竟不好理解:但说难吧也不难,其实就是让代码更简洁更有逼格的途径而已. 说了那么多屁话那么这个减去零到底是干啥的呢? 它的作用就是减去0的ASCII值:48.可以方便的用来转换大小写或者数字和和字符.比如我们可以写这么一个函数: #include <cstdio> #include <iostream> using namespace std; int ch

浅析python 中__name__ = &#39;__main__&#39; 的作用

很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = '__main__' 的作用,到底干嘛的? 有句话经典的概括了这段代码的意义: "Make a script both importable and executable" 意思就是说让你写的脚本模块既可以导入到别的模块中用,另外该模块自己也可执行. __name__ 是当前模块名,当模块

NSPredicate用法总结(Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取)

简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): [objc] view plaincopy NSPredicate *ca = [NSPredicate predicateWithFormat:(NSString *), ...]; Format:(1)比较运算符>,<,==,>=,<=,!=可用于数值及字符串例:@"number > 100" (2)范围

谈谈python 中__name__ = &#39;__main__&#39; 的作用

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

C++中explicit关键字的作用

转自:http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html explicit用来防止由构造函数定义的隐式转换. 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换. 例如: class things{ public: things(const std::string&name =""): m_name(name),height(0),weight(