• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

细嚼慢咽C++primer(1)——指针,void*型指针,const限定符(2) ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1 一个有效指针的三种状态:

1) 保存一个特定对象的地址;

2) 指向某个对象后面的另一对象;

3) 0值。表明它不指向任何对象。

如果必须分开定义指针和其所指向的对象,则将指针初始化为0。

如果在代码中使用了NULL这个于处理器变量,则编译时会自动被数值0替换。


2 void*型指针

void*指针可以博阿村任何类型对象的地址,表明该指针与这一地址值相关,但不清楚存储在此地址上的对象的类型。

void*指针支持的操作:

1) 与另一个指针进行比较

2) 向函数传递void* 指针或者从函数返回void* 指针

3) 给另一个void*指针赋值

不允许使用void*指针操纵它所指向的对象。因为需要重新获取存储在void*指针中的地址。


思考题:已知一指针p,你可以确定该指针是否指向一个有效的对象吗?

不可以。因为c++中,无法检测指针是否被初始化,也无法区分一个地址是否是有效地址,还是由指针所分配的存储空间中存放的不确定值的二进制位形成的地址。


3 指针和引用的比较

虽然指针和引用都可以间接访问另一个值,但是它们之间有两个重要区别(定义和赋值):

1) 引用总是指向某个对象,所以定义引用时没有初始化是错误的;

2) 赋值行为的差异:给引用赋值修改的是该引用所关联的对象的值,为不是使引用与另一个对象关联。

     注:C++允许计算数组或者对象的超出末端的地址,但不允许对此地址进行解引用操作。


4 指向const对象的指针和const指针

      指向const对象的指针:const double *cptr;

1) 把一个const对象的地址赋给一个普通的、非const对象的指针也会导致编译时的错误

2) 不能使用void*指针保存const对象的地址,而必须使用能够const void*类型的指针保存const对象的地址

3) 允许把非const对象的地址赋给指向const对象的指针,此时不能通过该指针修改该指向对象的值

因此把指向const对象的指针理解为”自以为指向const的指针“

      const指针:int *const curErr = &errNumb;

1) const指针的值不能修改,这就意味着不能使curErr指向其他的对象

2) 指针本身是const的事实并没有说明是否能使用该指针修改它所指向对象的值。指针所指对象的值能否修改完全取决于该对象的类型。

      指向const对象的const指针:const double *const pi_ptr = π

既不能修改pi_ptr指向对象的值,也不允许修改该指针的指向。


5 指针和typedef

typedef string *pstring;

const pstring cstr;

该声明把cstr定义为指向string类型对象的const指针。因为声明const pstring时,const修饰的是pstring的类型,这是一个指针。

等价于:

string *const cstr;



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++实现的IO高效的算法TPIE发布时间:2022-07-13
下一篇:
Julia, Python(Numba), C++, MATLAB 性能测试之“冰雹数”发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap