(笔记)第四章 数组与指针

1,当用字符串字面值初始化数组时

Char array[5] = “hello”;  //error

由于字符串字面值总是包含一个空字符(null)来表示字符串的结束,故此处数组的维度应该为6。

2,指针的引入

建议:尽量避免使用指针和数组 指针和数组容易产生不可预料的错误。其中一部分是概念上的问题:指针用于低级操作,容易然生与繁琐细节相关的(book keeping)错误。其他错误则源于使用指针的语法规则,特别是声明指针语法。 许多有用的程序都可不使用数组或指针实现,现代C++程序采用vector类型和迭代器取代一般的数组、采用string类型取代C风格字符串。

3,指针和 typedef

在 typedef(第 2.6 节)中使用指针往往会带来意外的结果。下面是一个

几乎所有人刚开始时都会答错的问题。假设给出以下语句:

           typedef string *pstring;

           const pstring cstr;

请问 cstr 变量是什么类型?简单的回答是 const pstring 类型的指针。

进一步问:const pstring 指针所表示的真实类型是什么?很多人都认为真正的类型是:

           const string *cstr; // wrong interpretation of const pstring

cstr

也就是说,const pstring 是一种指针,指向 string 类型的 const 对象,但这是错误的。

错误的原因在于将 typedef 当做文本扩展了。声明 const pstring 时,const 修饰的是 pstring 的类型,这是一个指针。因此,该声明语句应该是把cstr 定义为指向 string 类型对象的 const 指针,这个定义等价于:

           // cstr is a const pointer to string

           string *const cstr; // equivalent to const pstring cstr

转载于:https://my.oschina.net/auo/blog/175108

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值