`
ruilin521314
  • 浏览: 881868 次
文章分类
社区版块
存档分类
最新评论

const 指针的一些总结

 
阅读更多

前两天在网上看到华为的一些笔试题,对基础的掌握仍然是这种大公司所重视的。其间对指针掌握的要求比较多,有一道是关于const指针的。看到那道题,回来整理了一些有关const指针的内容,分享一下。

  const说明指针变量,组合的情况可能会显得很复杂。使用指针时要涉及两个目标,即指针本身和指针所指的对象。关于const指针变量,可归结为以下三种:
  1.指向常量的指针变量;
  2.常指针变量;
  3.指向常量的常指针变量。
  下面来分别谈谈这三种情况。

一、指向常量的指针变量:
声明格式: const type * var_name;
或 type const * var_name;
特点: 可改值。
  将指针声明冠以const,使指向的对象为常量,而不是指针为常量。注意:指向常量的指针不一定指向真正的常量,它也可以指向常量,只是从该指针的角度来看,它所指向的对象是常量,通过该指针不能修改它指向的对象。它还可以指向其它的对象,可以不初始化。
-----eg:
int a = 0,b = 1;
const int c = 3;
const int* pi; //等同于 (const int*) pi;
pi = &a;
*pi = 10; //错误:不能修改它指向的对象。
a = 10;
pi = &b;
*pi = &b;
*pi = 20; //错误:不能修改它指向的对象。
b = 20;
pi = &c;
*pi = &c;
*pi = 30; //错误:不能修改它指向的对象。
-----eg2:
const char* pc = "asdf";
pc[3] = 'a'; //错误:不能修改它指向的对象。
pc = "ghik";
-----eg3:
const char* step[3] =
{"left","right","hop"};
step[2] = "skip";
step[2][1] = 'i'; //错误:不能修改它指向的对象。

二、常指针常量:
声明格式: type* const var_name;
特点: 可改对象。
  要把指针本身,而不是它指向的对象声明为常量,采用运算符 *const,必须初始化,通过该指针可以修改它指向的对象,但它不可以指向其他的对象。
-----eg:
int a = 0,b = 1;
int* const pi = &a; //等于 int* (const pi) = &a;
*pi = 10;
pi = &b; //错误:pi本身为常量,不能指向其他对象。

三、指向常量的常指针变量:
声明格式: const type * const var_name;
特点: 值与对象均不能改。
  要使两个目标都是常量,两者都要声明为 const 。
eg:
int a = 0,b = 1;
const int c = 3;
const int* const pi = &a; //相当于: (const int*)(const pi) = &a;
*pi = 10; //错误:不能修改它的对象。
a = 10;
pi = &b; //错误:不能指向其它对象。
eg2:
const char* const pc = "asdf";
pc[3] = 'a'; //错误:不能修改它的对象。
pc = "ghik"; //错误:不能指向其它对象。
eg3:
const char* const step[3] =
{"left","right","hop"};
step[2] = "skip"; //错误:不能指向其它对象。
step[2][1] = 'i'; //错误:不能修改它的对象。

  一般的,当声明中出现 const 描述符时,它修饰的是紧跟其后的声明元素或者在 const 成员函数声明中函数的 this 指针。
  注意:可以将变量的地址赋给指向常量的指针变量,不会因此有什么害处,但是,常量的地址不能赋给无约束的指针。
eg:
int a = 1;
const int c = 2;
const int* p1 = &c;
const int* p2 = &a;
int* p3 = &c; //非法!
int* const p4 = &c; //非法! 指针常量 p4 能够改值。
const int* const p5 = &c;

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Noshoeman/archive/2005/08/31/468665.aspx

分享到:
评论

相关推荐

    详细分析c++ const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义:  const指针是指针变量的值一经初始化,就不可以改变指向,初始化是...

    C++中const用法总结

    文件有对const修饰普通变量、指针、函数等等的详细解释,是对c++中const用法的完整总结。

    C++ 中const总结

    C++ 中const总结 const 限定符把一个对象转换成一个常量,如 const int bufSize=512; 申 明 bufSize 的时候,如果不将它初始化,那么编译器会报错:const object must be initialized if not extern。因为 bufSize ...

    C语言中const与指针使用方法总结

    主要介绍了C语言中const与指针使用方法总结的相关资料,需要的朋友可以参考下

    C++中const用法总结.doc

    C++中const用法总结.doc C++中const用法总结.doc 1. const修饰普通变量和指针 2. const修饰函数参数 3. const 修饰函数返回值 4. const修饰类对象/对象指针/对象引用 5. const修饰成员变量 6. const修饰成员...

    《C语言指针经验总结》PDF

    《C语言指针经验总结》

    C语言指针-从底层原理到熟练应用(含源码)

    一、前言 二、变量与指针的本质 1. 内存地址 2. 32位与64位系统 3. 变量 4. 指针变量 5. 操作指针变量 三、指针的几个相关概念 1. const属性 2. void型指针 3. 空指针和野指针 ...五、总结

    C++中const的用法详细总结

    1. const修饰普通变量和指针 const修饰变量,一般有两种写法: const TYPE value;TYPE const value; 这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。 对于一个非指针的类型...

    C/C++中CONST用法总结(推荐)

     主要看const在*的前后,在前则指针指向的内容为常量,在后则指针本身为常量; const int *ptr; //*ptr为常量;  int const *ptr; //*ptr为常量;  int* const ptr; //ptr为常量;  const int * const ptr; //*...

    C语言中const,volatile,restrict的用法总结

    指针使用const则要稍微复杂点,因为不得不把让指针本身成为const和指针指向的值成为const区别开来、下面的声明表示pf指向的值必须是不变的 constfloat *pf;而pf则是可变的,它可以指向另外一个const或非const值;...

    C++编程中的const关键字常见用法总结

    1、定义常量 (1)const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。...2、指针使用CONST (1)指针本身是常量不可变 (char*) const pConte

    const yongfa

    让你不再害怕const前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有...

    Qt智能指针--QScopedPointer.pdf

    Qt智能指针--QScopedPointer ⽂章⽬录 概述 前⼀篇⽂章我们详细的介绍了的⽤法,那么,这⾥继续总结Qt的另⼀个智能指针QScopedPointer的⽤法。 QScopedPointer和C++中的智能指针std::unique_ptr其概念是⼀样的,它...

    总结C语言中const关键字的使用

    什么是const? 常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。...(1):const用来修饰普通的变量(指针变量除外)的时候,const type name 和 type const name 这两种形式是完全等价

    简单总结C语言中各种类型的指针的概念

    C语言中有很多关于指针的使用,指针也是C语言的灵魂所在,而且C语言中也有很多有关指针的概念,这里学习并总结了一些知道的概念。   常量指针: 首先它是一个指针,常量只是用来修饰指针的定语。其定义如下: char...

    C学习深入学习总结

    9.3 数组和指针有千丝万缕的联系而又不同,你是否对他们在不同情况下的使用进行过详细的总结? 12 9.4 “int calendar[10][20]; ”,这是一个什么样的数组?它拥有 10 数组类型的元素,还是 20 个? 12 9.5 “int a...

    C++ const用法及注意事项

    下面尽可能全面的总结const 的用法和技巧。主要资料来源于c++ primer,标题后的页码为c++ primer 中文版(第四版)的页码。  (一) const限定符(p49)  定义const对象时要初始化  除非特别说明,在全局作用域...

    C++面试常问知识点总结

    C++更加安全,增加了const常量、引用、四类cast转换(static_cast、dynamic_cast、const_cast、reinterpret_cast)、智能指针、try—catch等等; C++可复用性高,C++引入了模板的概念,后面在此基础上,实现了方便...

    指针操作数组的两种方法(总结)

    指针操作数组,方法一是p+index,方法二是p[index],第二种方法跟数组访问方法是一样的。 数组引用返回的是数组的第一个元素的指针地址。... const int ARRAY_LEN = 5; int MyNumbers[ARRAY_LEN]={24,-1,365,-999

    c/c++ 学习总结 初学者必备

    b): const指针 和 指向const的指针 及两者结合; c): const 参数修饰 和 参数返回类型的const修饰; d): const类成员 和 const 成员函数; 区别: const常量有数据类型, 而宏常量没有数据类型。编译器可以对前者...

Global site tag (gtag.js) - Google Analytics