Thinking in C++: 静态指针与指向静态类型的指针
当将const与指针一起使用的时候,一般有两种情况,const被应用到指针指向的那个东西,或者const被应用到存储在指针中的内存地址。
第一种情况:pointer to const
注意:const修饰符绑定到离他最近的那个东西上。
const int* u; //u是一个指针,指向一个const int。即 为 (const int) (*u);
也就是说u不是静态的,所以它不需要初始化。
但需要注意:
int const* v;//这个表达方式实际上与上面的那个表达式是一个意思!即 (int const) *v;
上面的两种情况会造成理解上的混乱,所以在实际的工作过程中应该坚持只使用第一种写法。
第二种情况:const pointer
要使指针本身变成const,你必须将const修饰符放在*的右边,如下所示:
int d =1;
int* const w = &d;
w是一个指针,它是const的,指向一个int类型。
但现在d是可变的:
d=2;
*w=3;
如果你不想指向的内容变化,可以:
int d =1;
const int* const x = &d;
int const* const x2=&d;
现在指针和指向的对象都不能变了,但请注意,只是*x与*x2不能赋值了,d还是可以赋值的。
下面是一个练习:
const int* u;
int const* v;
int d = 1;
int* const w = &d;
const int* const x = &d;
int const* const x2 = &d;
int main(){}
你能将一个non-const的对象的地址赋给一个const的指针,但你不能将一个const的对象的地址赋给一个non-const的指针!
另外需要注意一点:*其实是与标示符结合的,虽然我们写成int* a;实际上写成int *a;更接近实际。
Thinking in C++: 静态指针与指向静态类型的指针的更多相关文章
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- 为什么C++类定义中,数据成员不能被指定为自身类型,但可以是指向自身类型的指针或引用?为什么在类体内可以定义将静态成员声明为其所属类的类型呢 ?
static的成员变量,不是存储在Bar实例之中的,因而不会有递归定义的问题. 类声明: class Screen: //Screen类的声明 1 类定义: class Screen{ //Scree ...
- C++中指向对象的常指针和指向常对象的指针
指向对象的常指针 将指向对象的指针变量声明为const型,并使之初始化,这样指针值始终保持为其初始值,不能改变. Time t1(10,12,15),t2; Time * const ptr1=&am ...
- C void的指针 强制类型转换(int*)p 把变量指针p强制转换成指向int类型的指针
#include <stdio.h> int main(void){ void *p; int a = 14322; char c ='A'; p = &a; //p = & ...
- c++中指针常量,常指针,指向常量的常指针区分
const char * myPtr = &char_A;//指向常量的指针 char * const myPtr = &char_A;//常量的指针 const char * con ...
- C语言结构体指针(指向结构体的指针)详解
C语言结构体指针详解 一.前言 一个指向结构体的变量的指针表示的是这个结构体变量占内存中的起始位置,同样它也可以指向结构体变量数组. *a).b 等价于 a->b. "."一 ...
- const 指针与指向const的指针
最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- [C++]指针和指向数组的指针[一维数组与指针]
1.一维数组与指针 形如:int型 数组 a[10] 1)&a[0] 地址常量;地址类型:int *型 ; 存储数组a的首地址 ...
随机推荐
- Cocos2d-x3.0之路--02(引擎文件夹分析和一些细节)
关于怎么搭建好开发环境的我就不写了,网上非常多. 那么 我们来看看 引擎文件的文件夹 所谓知己知彼 百战不殆嘛 先说一下setup.py 这个文件是有关配置的python文件,比方我们在进行andro ...
- Post和Get差异
GET和POST差别例如以下: 1,生成方式 get方式有四种:1)直接在URL地址栏中输入URL.2)网页中的超链接.3)form中method为get. 4)form中method为空时.默认是g ...
- ShellExecute函数简单说明
平时在delphi写代码的过程中总是能遇到ShellExecute函数,于是索性将它的使用方法整理一下,由于我在微软的站点上也没能查到个详解(当然我查的中文版,俺菜嘛) ShellExecute函数原 ...
- 从零开始学习jQuery(剧场版) 你必须知道的javascript
原文:从零开始学习jQuery(剧场版) 你必须知道的javascript 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascri ...
- web.xml运行序列总结
在整个订单<context-param>--<listener>--<filter>--<servlet>. 其中,内的各类别中的序列被运行.和< ...
- css3中webkit-box的用法(平分父元素)
display:box;box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构.css实现的布局方式.经典的一个布局应用就是布局的垂直等高.水平均分.按比例划分.目前box- ...
- C#可扩展编程之MEF
C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻 前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在 ...
- C程序设计语言(第二版)习题:第二章
这一章习题做着很舒服,毕竟很简单.所以很有感觉. 练习 2-1 Write a program to determine the ranges of char , short , int , and ...
- JavaScript里的依赖注入
JavaScript里的依赖注入 我喜欢引用这句话,“程序是对复杂性的管理”.计算机世界是一个巨大的抽象建筑群.我们简单的包装一些东西然后发布新工具,周而复始.现在思考下,你所使用的语言包括的一些内建 ...
- 修改Ubuntu Server的分辨率
修改Ubuntu Server的分辨率,其实就是找到关键的文件,然后修改参数,重启一下,就可以看见效果了. 1.打开文件并修改参数 文件位置:/etc/default/grub 修改位置:GRUB_C ...