为什么int类型的数据不能改成const int类型的值?

如题所述

一、const int 和int 的区别

1、返回值

const int & 是返回这个数值的一个常量的引用。

而int 是返回这个数值的一个拷贝。

int 是进行拷贝构造,而const int & 是返回的引用。拷贝构造更消耗时间,与此同时还用析构函数。因为产生了一个拷贝,你就可以轻易地修改拷贝的内容。

2、取指针

const int类型一旦定义以后就不能修改,int类型是随时可以修改的。

在取指针方面,const有略复杂的东西,但是常规的、合理的操作不应该涉及到,因为const int是用来保存一些全局常量的,这些常量在编译期可以改,在运行期不能改。

听起来这像宏,其实这确实就是用来取代宏的: #define PI 3.14 const float Pi = 3.14; 如果你的代码里用到了100次PI(宏),你的代码中会保存100个3.14这个常数。

鉴于使用常数进行运算的机器代码很多时候会比使用变量来的长,如果你换用100次Pi(const float),程序编译后的机器码里就不需要出现100次常量3.14,只要在需要的时候引用存有3.14的常量就行了。

特别在复杂的运算里,3.14这个常量(其实是无法修改的变量)会被一直装载在寄存器里带来一些性能提升。

3、内容

constint* p; //p可变,p指向的内容不可变,int const* p; //p可变,p指向的内容不可变。 int* const p; //p不可变,p指向的内容可变 const int* const p; //p和p指向的内容都不可变。

二、const的作用:

1、可以定义const常量,具有不可变性。 

例如:const int Max=100; Max++会产生错误; 

2、便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患。

例如: void f(const int i) { .........} 编译器就会知道i是一个常量,不允许修改; 

3、可以避免意义模糊的数字出现,同样可以很方便地进行参数的调整和修改。 同宏定义一样,可以做到不变则已,一变都变!

如1中,如果想修改Max的内容,只需要它修改成:const int Max=you want;即可!

4、可以保护被修饰的东西,防止意外的修改,增强程序的健壮性。 还是上面的例子,如果在函数体内修改了i,编译器就会报错; 

例如: void f(const int i) { i=10;//error! } 

5、可以节省空间,避免不必要的内存分配。

扩展资料

当const修饰的是指针类型,那么指针的值就不能改变,即不能指向其他地址,但是可以通过指针修改其指向地址里面的值。

当const修饰时指针指向的类型时候,那么指针被指向其他地址,但是不能通过指针修改指针里面的值。

1)先从const int i说起。

使用const修饰的i我们称之为符号常量。即,i不能在其他地方被重新赋值了。注意:const int i与int const i是等价的,相同的,即const与int的位置无所谓。

2)const int *p

看例子:

int i1=30;

int i2=40;

const int *p=&i1;

p=&i2;  //此处,p可以在任何时候重新赋值一个新的内存地址。

i2=80;  //这里能用*p=80来代替吗?答案是不能

printf("%d",*p);  //输出80

分析:p的值是可以被修改的,即它可以重新指向另一个地址。但是不能通过*p来修改i2的值。

首先,const修饰的是整个*p(注意,是*p而不是p),所以*p是常量,是不能被赋值的。虽然p所指的i2是变量而不是常量;

其次,p前并没有用const修饰,所以p是指针变量。能被赋值重新指向另一个内存地址。


参考资料:百度百科——const

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-01-14
int类型的变量和const int类型的变量在内存中分配的方式不同。
int类型的变量是一个可变量,它在程序运行过程中可以被修改。它会在栈上分配内存,并且可以随时被修改。
而const int类型的变量是一个常量,它的值在程序运行过程中是不可变的。它会在常量区分配内存,并且不能被修改。
因为int类型的变量在程序运行过程中是可以被修改的,而const int类型的变量是不能被修改的,所以int类型的变量不能改成const int类型的变量。
如果要将int类型的变量值转换为const int类型的值,需要将int类型的变量赋值给一个新的const int类型的变量。
int a = 5;
const int b = a;
这样 a 就可以修改,b就不能被修改了。
总之,因为它们的内存分配和可变性不同,所以int类型的变量不能改成const int类型的变量。

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网