zoukankan      html  css  js  c++  java
  • const指针用法总结

    1.const限定符

    const限定符可以把一个对象转换成一个常变量,常量在定义后就不能被修改,因此定义时必修初始化。

    const int bufSize = 512;//OK
    bufSize = 0;//error,bufSize是不可修改的左值
    const int i;//error,未初始化

    2.const与指针

    2.1指向常量的指针变量

    一般形式:

    const 类型名 * 指针变量名;

    const int * p1;//定义了指向常量的指针变量

    说明:

    const限定的是p1指针指向的对象,而不限定指针p本身;在定义时可以不初始化,允许重新赋值指向其他的const对象,但不能通过p改变所指对象的值

    例子:

    const int a = 10;//a是常量,必须定义时初始化且不能再改变
    const int b = 15;
    const int *p1;
    p1 = &a;//ok
    *p1= 20;//error,试图通过指针p1改变它指向对象a的值
    p1 = &b;//ok,指向是可以改变的
    *p1= 20;//error,试图通过指针p1改变它指向对象b的值

    分析:

    本质上来说,由于没有方法分辩p1所指的对象是否为const,系统会把它所指向的所有对象都视为const。所以指向 const 对象的指针也可以指向 非const 对象。

    例子:

    int c = 15;//非const对象
    p1 = &c;//ok,指向非const对象
    *p1 = 20;//error

    总结:

          定义时可以未初始化,任何企图通过指向const对象的指针修改其值的行为都会导致编译出错。指针本身的值可以改变,这样指针变量p1就指向了不同的地址,对它进行解引用操作,就会得到不同的值。

          在实际的程序中,指向 const 的指针常用作函数的形参。将形参定义为指 向 const 的指针,以此确保传递给函数的实际对象在函数中不因为形参而被修改。

    2.1.1继续分析

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

    const int val = 15;//const对象
    void *ptr2 = &val;//error,iconst nt * 无法转换为 int *
    const void *ptr3 = &val;

    (2)不能使用 void* 指针保存 const 对象的地址,而必须使用 const void* 类型的指针保存 const 对象的地址
    例子:
    const int val = 15;//const对象
    void *ptr2 = &val;//error,iconst nt * 无法转换为 int *
    const void *ptr3 = &val;

    2.2常指针(const指针)

    这种指针变量称为常指针变量,简称常指针,即指针值不能改变。

    一般形式:

    类型名 * const 指针变量名;

    const int *p;

    说明:

    const限定的是指针变量,任何企图给const指针变量赋值的行为都会导致编译出错,能否通过该指针修改它所指向对象的值,取决于对象本身。

    例子:

    int a = 12,b = 15;
    int * const p = &a;//必须在定义时初始化
    
    p = &b;  //error,不能改变p的指向
    *p = 20;  //ok,可以通过指针变量改变指向的内容

    总结:

          指针变量的指向不变

    2.3指向常量的常指针

    一般形式:

    const 类型名 * const 指针变量名;

    例子:

    	int a = 12,b = 15;
    	const int * const p = &a;//必须在定义时初始化
    
    	p = &b;  //error,不能改变p的指向
    	*p = 20;  //error,不能通过p改变a的值
    	a = 20; //ok

    总结:

          指向常量的常指针即指针变量指向一个固定的对象,该对象的值不能被改变(不能通过指针变量改变对象的值)。

     3.总结

     那么如何记忆const与指针的关系呢?我们可以从const位于*的位置来记忆,如下:

    const int *p = &a;
    const在*的左边即表示:不能通过指针p修改其指向的内容

    int * const p =&a;
    const在*的右边即表示:不能改变指针p的指向,即指针值


  • 相关阅读:
    Android 定制RadioButton样式
    TabActivity的不同实现
    android源码的目录
    让我们一起来做最漂亮的Android界面
    【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性
    iPhone iPad 各种控件默认高度
    互联网的的一些历史资料收集
    Android vs iPhone icon设计指南
    android获取手机cpu是单核还是多核的方法
    前端必读:浏览器内部工作原理
  • 原文地址:https://www.cnblogs.com/jinxiang1224/p/8468455.html
Copyright © 2011-2022 走看看