zoukankan      html  css  js  c++  java
  • 分享:C语言中Const指针变量(常指针)

    C语言中,指针是最难理解的一部分,尤其是Const指针变量。

    Const指针变量只保护其Value值不被改变,并不能保护指针所指向的地址中的值不被改变,下面是针对Const指针的一个小练习:

    #include "stdafx.h"

    int main(int argc, char* argv[])
    {

    //定义基本类型的const变量,const 位置在哪儿都可以
    const int x = 2,y = 3;  //两个常量
    //定义一个非const变量
    int z = 3;     //一个普通变量
    //定义一个指向常的指针
    const int* pc = &x;   //指向常量的指针
    //定义一个常指针
    int* const cp = &z;   //常指针
    //定义一个非const指针
    int* pp = &z;    //int 型指针

    // x = y;  //x 为const变量,所以x的值不可以被更改   只能做右值

    pc = &z; //可以,pc是一个指向常量的指针,不能通过该指针去修改指针所指向的内存空间的值,但是,该指针可以指向别的变量

    // *pc = 10; //不可以,*pc所指向的地址为const变量,其值不可更改 pc是一个指向常量的指针,不能通过该指针去修改指针所指向的内存空间的值
    // *pc = y; //不可以,同上
    // *pc = 5; //同上

    pc = pp; //可以,pc为指针,其值可被改变 pc是一个指向常量的指针,pp是一个普通指针,用一个普通指针给一个指向常量的指针赋值是可以的
    // pp = pc; //用一个指向常量的指针,赋值给一个普通指针,不可以。如果可以,那么就可以通过普通的指针去修改内存的值

    z = 5;  //可以,给一个非const变量赋值是可以的
    z = x;  //可以,用一个const的变量给一个非const变量赋值是可以的

    *cp = x; //可以,通过常指针去修改指针所指向变量的值,原则上来讲是可以的,如果指向的变量是const的,那么不同编译器会有不同的结果

    // cp = &x; //不可以,cp为常指针,指针的值不能被修改,给常指针赋值是错误的

    // pp = &x; //不可以,pp是非const指针,原则上来讲给它赋值是可以的,在不同的编译器下有不同的结果
    // pp = pc; //不可以,指向常量的指针不能赋值给一个普通的指针
    pp = cp; //可以,常指针可以赋值给一个普通指针

    const int * const pp = &a; //双const 既保护指针又保护内存变量
    printf("Hello World!\n");
    return 0;

    }

  • 相关阅读:
    Creating a generic Web Parts for hosting ASP.NET User Controls
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 1)
    How to use CreateChildContorls method inherited from System.Web.UI.Control
    How to quickly access Web Part Management Page
    SQL Script tips for MS SQL Server
    How to enable single signon service on the SPS
    A brief summary of UML & Rational Rose – Use Case Diagram, Part II
    Borland Together for Visual Studio.Net V2.0 安装问题
    Speed Up SQL Server Apps 提高SQL Server应用程序的运行效率 (Part 2)
    体验ReSharper V1.0 for VS.Net 2003 Part I
  • 原文地址:https://www.cnblogs.com/mylinux/p/3047719.html
Copyright © 2011-2022 走看看