typedef char *pstring const char 转stringpstring cstr=0; 怎么理解

中国领先的IT技术网站
51CTO旗下网站
《C++ Primer中文版(第5版)》第2章变量和基本类型,本章C++语言提供了一套基础内置类型,如int和char等,这些类型与实现它们的机器硬件密切相关。类型分为非常量和常量,一个常量对象必须初始化,而且一旦初始化其值就不能再改变。此外,还可以定义复合类型,如指针和引用等。复合类型的定义以其他类型为基础。本节为大家介绍类型别名。
作者:王刚/杨巨峰 译来源:电子工业出版社| 20:44
2.5.1& 类型别名
类型别名(type alias)是一个名字,它是某种类型的同义词。使用类型别名有很多好处,它让复杂的类型名字变得简单明了、易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。
有两种方法可用于定义类型别名。传统的方法是使用关键字typedef:
typedef&double&&&&//wages是double的同义词 &typedef&wages&base,&*p;&//base是double的同义词,p是double*的同义词&
其中,关键字typedef作为声明语句中的基本数据类型(参见2.3节,第50页)的一部分出现。含有typedef的声明语句定义的不再是变量而是类型别名。和以前的声明语句一样,这里的声明符也可以包含类型修饰,从而也能由基本数据类型构造出复合类型来。
新标准规定了一种新的方法,使用别名声明(alias declaration)来定义类型的别名:
using&SI&=&Sales_item;&&//&SI是Sales_item的同义词&
这种方法用关键字using作为别名声明的开始,其后紧跟别名和等号,其作用是把等号左侧的名字规定成等号右侧类型的别名。
类型别名和类型的名字等价,只要是类型的名字能出现的地方,就能使用类型别名:
wages&hourly,&&&&&&&&//&等价于double&hourly、 &SI&&&&&&&&&&&&&&&&&&&&&//&等价于Sales_item&item&
指针、常量和类型别名
如果某个类型别名指代的是复合类型或常量,那么把它用到声明语句里就会产生意想不到的后果。例如下面的声明语句用到了类型pstring,它实际上是类型char*的别名:
typedef&char&* &const&pstring&cstr&=&0;&//&cstr是指向char的常量指针 &const&pstring&*&&&&&&//&ps是一个指针,它的对象是指向char的常量指针&
上述两条声明语句的基本数据类型都是const pstring,和过去一样,const是对给定类型的修饰。pstring实际上是指向char的指针,因此,const pstring就是指向char的常量指针,而非指向常量字符的指针。
遇到一条使用了类型别名的声明语句时,人们往往会错误地尝试把类型别名替换成它本来的样子,以理解该语句的含义:
const&char&*cstr&=&0;&&&//&是对const&pstring&cstr的错误理解&
再强调一遍:这种理解是错误的。声明语句中用到pstring时,其基本数据类型是指针。可是用char*重写了声明语句后,数据类型就变成了char,*成为了声明符的一部分。这样改写的结果是,const char成了基本数据类型。前后两种声明含义截然不同,前者声明了一个指向char的常量指针,改写后的形式则声明了一个指向const char的指针。【责任编辑: TEL:(010)】&&&&&&
大家都在看猜你喜欢
热点热点头条头条热点
24H热文一周话题本月最赞
讲师:413828人学习过
讲师:738876人学习过
讲师:153481人学习过
精选博文论坛热帖下载排行
Linux出色的网络功能堪称当今操作系统中的佼佼者,无论在功能还是在支持能力上都有令人满意的表现。Linux内置的多个服务器,几乎包含了目前...
订阅51CTO邮刊2008年1月 C/C++大版内专家分月排行榜第二
2008年6月 C/C++大版内专家分月排行榜第三
2008年6月 C/C++大版内专家分月排行榜第二
2008年9月 C/C++大版内专家分月排行榜第三
2009年4月 Linux/Unix社区大版内专家分月排行榜第三
2013年3月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。c++primer 学习(1)
一、有符号数与无符号数
有符号数和无符号数运算自动变成无符号数
二、指针与引用
1,某个值的引用无法改变,即是说引用只能引用一个对象
2.int &*p 错误,因为引用不是对象;int *&p正确
3. int i = 42;
& &const int &r1 = // we can bind a const int& to a plain int object
& &r1 = 10//错误,不能改值
& &const int &r2 = 42; // ok: r1 is a reference to const
& &#### int &r2 = 42 ;//error&
& &const int &r3 = r1 * 2; // ok: r3 is a reference to const
& &int &r4 = r1 * 2; // error: r4是一个普通的非常量引用,
& & const int &r5 = i;//但是可以这样 具体解释:
因为当const int &r5 =时,编译器实际上是这样的
& & &const int a =
& & &const int &r5 =
所以实际上r5绑定的是a而不是,i;如果没有const,程序员希望可以通过修改r5改变i;可是r5绑定的是a,所以没用,所以c++规定这样使用非法。
4.区别 :const int *p 指向int型常量的指针,从右向左读;int *const p 常量指针指向int
5.自身是const的指针是顶层const,指向const的是底层const
6.常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式
int staff_size = 27; // staff_size is not a constant expression
const int sz = get_size(); // sz is not a constant expression,因为在编译过程中不能得到计算结果。
typedef char *
const pstring cstr = 0; // cstr is a constant pointer to char指向char的常量指针,
const pstring * // ps is a pointer to a constant pointer to char
我的理解这个时候pstring已经是一个char类型的指针,用const修饰它。所以是一个常量指针
The base type in these declarations is const pstring. As usual, a const that
appears in the base type modifies the given type. The type of pstring is “pointer to
char.” So, const pstring is a constant pointer to char—not a pointer to const
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:136次
排名:千里之外
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Primer读书笔记(全)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 const char string16 的文章

 

随机推荐