精华内容
下载资源
问答
  • js 中 const 定义的是否能更改使用const定义js基本类型 String使用const定义js基本类型 Number使用const定义js基本类型 Boolean使用const定义js基本类型 Null使用const定义js基本类型 Undefined使用const定义js...


    验证例子:

    使用const定义js基本类型 String

    const str = "Clig";
    str = "lgc";
    console.log(str); // Clig
    
    VM1568:2 Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:2:5
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:2:5

    使用const定义js基本类型 Number

    const number = 6;
    number = 8;
    console.log(number); // 6
    
    VM1568:2 Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:2:8
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:2:8

    使用const定义js基本类型 Boolean

    const boolean = true;
    boolean = false;
    console.log(boolean); // true
    
    VM1568:2 Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:2:9
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:2:9

    使用const定义js基本类型 Null

    const n = null;
    n = 0;
    console.log(n); // null
    
    VM1568:2 Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:2:3
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:2:3

    使用const定义js基本类型 Undefined

    const u = undefined;
    u = 0;
    console.log(u); // undefined
    
    VM1568:2 Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:2:3
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:2:3

    使用const定义js引用类型 Array

    const arr = ["李广程",21];
    arr[2] = "深圳";
    console.log(arr); // ["李广程", 21, "深圳"]
    

    修改成功

    使用const定义js引用类型 Object

    const object = {name:"李广程",age:21};
    object["address"] = "深圳";
    console.log(object); // {name: "李广程", age: 21, address: "深圳"}
    

    修改成功

    使用const定义js引用类型 Function

    const fun = ()=>{
    	return "我是引用类型 Function";
    };
    fun = () =>{
    	return "我是修改后的引用类型 Function";
    };
    console.log(fun); // {name: "李广程", age: 21, address: "深圳"}
    
    Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:4:5
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:4:5

    使用const定义js引用类型 Date

    const date = new Date();
    date = new Date();
    console.log(date); // Sun Jan 24 2021 15:43:13 GMT+0800 (中国标准时间)
    
    VM459:2 Uncaught TypeError: Assignment to constant variable.
        at <anonymous>:2:6
    

    VM1568:2未捕获类型错误:分配给常量变量。
    未知:2:6

    结论:const定义的基本类型不能改变,但是定义的引用类型中的 数组对象 可以通过修改对象属性改变。

    const使用建议:不要使用const定义 数组对象 作为常量。

    展开全文
  • 改变const值的方式

    2014-09-10 10:18:48
    一种改变const值的方式是使用const_cast类型转换符,将const变量转换为一个该变量的引用,通过这个引用去改变值,这种方法的实质就是用地址改变内存的值。如下实例:  struct SA {  int i = 0;  };  ...
    一种改变const值的方式是使用const_cast类型转换符,将const变量转换为一个该变量的引用,通过这个引用去改变值,这种方法的实质就是用地址改变内存的值。如下实例:

             struct  SA  {
             int  i = 0;
         };

           const SA sa;
           cout << sa.i << endl;
           SA &sb = const_cast<SA&>(sa);
           sb.i = 11;
           cout << sa.i << endl;


    上述这种方式中对象sa是存储在内存中的,并且这个内存在系统中是可更改的,所以我们 可以利用上述这种方式来做改变。
    考虑下面的实例:
             const  int  i = 0;
              int  &b =  const_cast < int    &>(i);
            b = 10;
            cout << i << endl;
            cout << b << endl;


    结果将不如人所料,i输出的值还是0,b输出的值是10.这是什么原因呢?这主要是因为C++编译器中const的实现机制的问题。在C++中,const会被看成是一个常量,所以像数值,字符串这类的值,编译器都会将其放入文字常量区,这也是python中的处理方式。当声明一个引用类型的b时,编译器为他在内存中(栈,不是文字常量区)分配空间,因此是可以改变的。那么我们怎么改变i的值呢?想办法获取此时0在文字常量区的地址,将其改变会不会是一种方式呢?
    展开全文
  • 用指针居然可以修改const常量的 关于const "const"在嵌入式C语言中为建议性的,尽量保证其不变,并非强制性的。话不多说,上程序吧: #include<stdio.h> int main() { const int a = 0x12345678; int b ...

    用指针居然可以修改const常量的值

    关于const

    "const"在嵌入式C语言中为建议性的,尽量保证其值不变,并非强制性的。话不多说,上程序吧:

    #include<stdio.h>
    int main()
    {
    	const int a = 0x12345678;
    	int b = 0x11223344;
    	int *p = &b;
    	p[1] = 0x100;
    	//*(p+1) = 0x100;
    	printf("the a is: %x\n",a);
    	
    	return 0;
    }
    

    在Linux系统下gcc编译后的运行结果如下:

    在这里插入图片描述

    你有想明白吗?主要和内存分布有关。。。就是编译器分配内存的方式,然后根据b的地址就可以找到a的地址,进而改变其值。

    展开全文
  • 更改const

    千次阅读 2017-03-18 09:54:41
    今天突发奇想,如果用一个指针指向const变量,再通过指针修改这个会怎样?实验1const int a=1; int *b = &a;结果 test.c:20:14: error: invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]实验2...

    今天突发奇想,如果用一个指针指向const变量,再通过指针修改这个值会怎样?

    实验1

    const int a=1;
    int *b = &a;

    结果
    test.c:20:14: error: invalid conversion from ‘const int*’ to ‘int*’ [-fpermissive]

    实验2

    #include<stdio.h>
    
    void b(int *a)
    {
        *a=*a+1;
    }
    
    int main(void)
    {
         const int a=1;
        int *c = (int *)(&a);
        b(c);
        printf("%d\t",a);
        printf("%d\t",*c);
        return 0;
    }

    输出 1 2
    这个时候挺纳闷,怎么值不一样了,分身了?然后经高人指点继续实验

    实验3

    #include<stdio.h>
    #include<string.h>
    
    
    void b(int *a)
    {
        *a=*a+1;
    }
    
    int main(void)
    {
        volatile const int a=1;
        int *c = (int *)(&a);
        b(c);
        printf("%d\t",a);
        printf("%d\t",*c);
        return 0;
    }

    实验结果 输出 2 2

    第一次知道 常量值竟然能被改变 ???
    然后网上找了找 有网友答复如下

    Good question.
    楼主给出的这种情况叫“未定义行为”,也就是说这种情况的处理不是由C标准制定的,随着具体环境的变化会有不同的、不可预料的后果。
    你刚才给的应该是GCC的处理,我用OS X 10.11.1下的clang LLVM和Windows 10下的Visual Studio 2015测试的结果是这样的:
    对于clang LLVM,执行时不更改const int intVar的值。
    对于MSVC,执行时更改const int intVar的值。
    
    
    简单地说这是一个未定义行为,编译器理应报告用户。但是如果编译器选择只报warning,当你执行生成的可执行文件的时候它就变成了未定义行为。
    

    更多讨论参见

    http://stackoverflow.com/questions/15576000/in-c-can-a-const-variable-be-modified-via-a-pointer

    展开全文
  • test_const.c 1 /* 2 * this program is used to test whether the value of a "const" variable can be 100% unmodified. 3 */ 4 5 #include<stdio.h> 6 int main(void ) 7 { 8 int con...
  • 今天偶然看到内联汇编,里面有一个const和volatile的部分, 所以想写一个文章...从这里可以看出,这个地址没变,但是他的确实是改变过, 同样的 ,const 指针 ,const 数组指针 都可以通过加一层指针来改变其数值。
  • 一旦声明,常量的就不能改变。 只声明不赋值,就会报错。 const命令声明的常量也是不提升,同样存在暂时性死区,只能在声明的位置后面使用 const实际上保证的,并不是变量的不得改动,而是变量指向的那个内存...
  • const定义的常量实际上是栈内存地址中的保存的const常量的不可以被更改就是栈内存中保存的数据不可以被更改。基本数据类型直接存储在栈内存中,所以不可以更改。而引用数据在栈内存中存储的是一个指针,真正的...
  • const

    万次阅读 多人点赞 2019-05-02 20:11:46
    const修饰的数据类型是指常类型,常类型的变量或对象的是不被更新的。 目的 编辑 const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点。 主要作用 编辑 (1)可以定义...
  • 我定义一个const char * a ,const 修饰表示*a的能改变。赋值给*a肯定是错误的。例*a = 0x11;是错误的。 我不理解的是*a>>1;是在哪里改变的。不是在原内存改变的?不是不能改变*a的吗?请大神解疑。谢谢。 ...
  • 如下: #include using namespace std; class Derived { public: void func() const//func(int x)也可以改变x的 { int x=0; x=x+1; //如果是mValue就不
  • 教你改变const变量的

    千次阅读 2013-01-28 22:42:32
    呵呵,应该很多人做过这个事,好奇心来了没办法,不过可不用在实际编程上哟 不记得哪位大师说过:试图欺骗编译器的人终会自食恶果。 不过要说明下,用const修饰的变量(这是一个假常量),本质上其实和未用const...
  • 本文对使用指针对const进行修改进行探讨。
  • 并且一旦被赋值,就不被修改。如下代码展示的一样 const foo; //SyntaxError: Missing initializer in const declaration` 但是,用const声明对象的时候有一个非常有意思的情况,请看下面代码 const foo ={}; //...
  • const 的定判断

    2015-01-06 09:41:45
    const在*的左边,则指针指向的变量的不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为“左定,右定向”。 1)指针指向的变量的变,指向可变 int x = 1; int y = ...
  • const 定义的常量 竟然能改变!!! 前几天 被问到 var let const 的区别是什么 我自信的回答 var let 定义变量改变 const(就这么普通且自信 ) 人家告诉我 const定义的常量是可以改变的 ! 我 ???? ...
  • 关于const_cast 和 修改const

    千次阅读 2012-08-21 09:58:29
    用法:const_cast (expression)  该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。  一、常量指针被转化成非常量指针,并且仍然指向原来的对象;...
  • CONST

    2015-07-14 17:45:36
    const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在...
  • const定义的变量可以更改吗

    千次阅读 2018-11-29 17:06:06
    const定义的基本数据类型的变量不可以修改,但其它复杂数据类型是可以修改的 示例: (1) const a = 1; a = 2 //报错   (2) const arr = [1,2,3]; arr[2] = 5 arr.push(10) console.log(arr) //[1, 2, 5...
  • 关于C++ const 的全面总结

    万次阅读 多人点赞 2009-04-30 08:54:00
    C++中的const关键字的用法非常灵活,而使用const将大大...Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的是不被更新的。一、Const作用 如下表所示:No.作用说明参

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 351,715
精华内容 140,686
关键字:

const的值能改变吗