zoukankan      html  css  js  c++  java
  • 空暇时候思考之const

    对于多数人来说那些const的使用方法比方修饰返回值和修饰參数都应该是十分好理解的下来我要讨论


    对于C语言中

    #include <stdio.h>
    
    void main()
    {
    	const int a=10;
    	int *p =(int*) &a;
    	*p = 100;
    	printf("%d
    ",a);
    }
    

    上边输出100

    对于C++中

    #include<iostream>
    using namespace std;
    
    void main()
    {
    const int a=10;
    int *p =(int*) &a;
    *p = 100;
    printf("%d
    ",a);
    }
    上边输出10


    原因是什么呢。C中为const是一个不能被改变的变量,有内存空间的分配,所以能够在内存中通过地址改变

    C++中的const是一个常量,通常是保存在字符表中,不分配内存。仅仅是在方位该变量的时候或者查看变量的地址的时候就会又一次分配一个同名变量与const的常量的值同样,所以此时输出的地址是这个新变量的地址。所以通过地址改变的还是这个变量的值。可是输出的时候编译器还是会在符号表里面读取这个常量的值,所以值未改变


    const int size;

    //c中const默认外部链接这里仅仅是一个声明而已

    const int bufsize = 100;
    char buf[bufsize];//这在C语言中是非法的,由于c语言中bufsize是一个不能改变的变量
                     //可是这在C++中合法的。由于C++中不为bufsize建立存储空间。仅仅是存储在符号表中
                      
    //可是C++中const默认内部连接,假设要在多编译单元中使用必须设置为
    extern const int bufsize=100;    //改为外部连接,此时就是强制为const创建空间
    extern const int bufsize;//这在c++中仅仅是声明,仅仅能在初始化的时候才分配内存
    //在c++中一个const不必建立空间,可是c中const必须建立空间    
     
    const int i[] = {1,2,3,4};//集合不能保存到符号表中。所以仅仅能也必须分配内存
    float f[i[3]];//编译期间的值是不能使用的。由于编译期间编译器就不知道存储器的内容
    struct S
    {
        int i;
        int j;
    };
    const S s[] = {{1,2},{3,4}};

    int main()
    {

    }

  • 相关阅读:
    『PyTorch』第四弹_通过LeNet初识pytorch神经网络_下
    『PyTorch』第三弹重置_Variable对象
    『PyTorch』第二弹重置_Tensor对象
    『PyTorch』第一弹_静动态图构建if逻辑对比
    『TensorFlow』DCGAN生成动漫人物头像_下
    『Python』pycharm常用设置
    『TensorFlow』通过代码理解gan网络_中
    『TensorFlow』TFR数据预处理探究以及框架搭建
    『Python』库安装
    『TensorFlow』读书笔记_TFRecord学习
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6939726.html
Copyright © 2011-2022 走看看