zoukankan      html  css  js  c++  java
  • C++入门-const常量限制与const指针

    看一个例子:在C语言中实现圆面积计算

     1 #include <stdio.h>
     2 
     3 #define PI 3.14
     4 
     5 int main(int argc, char const *argv[]) {
     6     float r = 0.5;
     7     float n = PI * r * r;
     8     printf("n=%f
    ", n);
     9     return 0;
    10 }

    在上面的宏定义PI,并不知道他的类型,没有类型检查,只是简单替换。

    在C++中,有一个新的关键字const常量--在所在生命周期内,其值不变,常量一旦定义了,就不可以再次赋值,所以要在定义时赋值。

    const float FPI = 3.14;

    编译器在程序编译时期做检查,即const常量在程序编译的时候不可以修改

    2、const 指针

    例子:

     1 #include <iostream>
     2 #include <string>
     3 using namespace std; 7 
     8 int main(int argc, char const* argv[]) {
     9     char* p = "Hello World!";
    10     p[0] = 'a';
    11     return 0;
    12 }

    编译通过,执行时段错误。因为字符串常量分配的内存可见只允许读不可写。

    1) const TYPE* / TYPE const*

    通过加上const修饰指针,const在*前面, 使编译时检查,表示指针指向的内容不可修改,但是指针的值可以改变。

        char const* p = "Hello World!";
        const char* p2 = "Hello World!";
    
        char* p3 = nullptr;
        p = p3;

    2) TYPE* const

        char szBuf[256] = "Hello World!";
        char* const p = szBuf;
        p[0] = 'A';
        //p = nullptr;   //error:assignment of read-only variable ‘p’

    3)const_cast

    可以用于去除const修饰

        const int n = 5;
        // int* p = (int*)&n;
        int* p = const_cast<int*>(&n);
        *p = 1;
  • 相关阅读:
    数据类型及用法
    NFS与SSH
    nginx服务,nginx反向代理
    rpm软件包管理
    磁盘分区,文件系统,软链接和硬链接,内存和进程管理
    Linux常用命令,文件目录和权限管理
    操作系统与网络协议(day3)
    计算机基础之硬件简介(Day2)
    QT写串口
    485传输
  • 原文地址:https://www.cnblogs.com/y4247464/p/13813563.html
Copyright © 2011-2022 走看看