const和非const变量/对象/指针之间的赋值问题 |
您所在的位置:网站首页 › 指针变量能赋值吗为什么 › const和非const变量/对象/指针之间的赋值问题 |
const和非const变量/对象/指针之间的赋值问题
变量赋值 const int a = 10; int b = 10; a = b;// error b = a;// correct变量在经过const关键字修饰以后就不能再被修改了,所以a=b是错误的。而b=a仅仅是将a变量中的内容复制一份给了变量b,所以赋值过后对副本b进行操作是不会对于a有什么影响的,这样行为是合法的。 对象赋值 struct A { int a; }; const A a; A b; a = b;// error b = a;// correct对象之间的赋值和变量之间的赋值也是一样的,只不过对象中可能存在的数据更多一点,但是赋值的性质还是和变量赋值是一样的。 指针赋值 int n1, n2, n3; const int* a = &n1; int* b = &n2; int* const c = &n2; a = b;// correct b = a;// error b = c;// correct首先要明确a和c的区别,a中const修饰的是*a,所以a指针指向的内容是不可以被改变的,而c中const修饰的是c本身的指向,所以c的指向是不能被改变的。 a=b,相当于a指向b指向的空间,但是a的指向的内容是不可以被修改的,b的指向是可以修改的,所以这样a的指向不会对b指向的空间造成潜在威胁。 b= a,相当于b指向a指向的空间,a的指向的内容是不可以被修改的,b的指向是可以修改的,这时候如果通过b就可以修改a指向的空间中这不允许被修改的内容,这样b指针的指向改变就会对a指向的空间造成潜在的威胁。 b=c,相当于b指向c指向的空间,因为c的指向不可以被改变,但是空间的内容是可以被修改的,所以b并没有对c指向的空间造成潜在的威胁。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |