1.const在c与c++共通的部分
1.1顺口溜;const 在谁前谁就不能被修改
#include <stdio.h>
int main()
{
第一种
const int a=10;
a=20;这样也是不行的
int a=10;
int b=30;
第二种
const int *p=&a;
p=&b;//这样是可以的
*p=b;//这样是不行的
int const *p= &a;
p=&b;//这样是可以的
*p=b;//这样是不行的
第三种
int *const p=&a;
p=&b;//这样是不行的
*p=b;//这样是可以的
return 0;
}
2.在c中const修饰的叫只读变量
2.1像这样的赋值是不可以的,被const的修饰的变量为只读变量,并不能赋值修改
#include <stdio.h>
int main()
{
const int a=3;
b=20;
a=b;
return 0;
}
2.2但是可以通过指针来改变a的值,因为是只读变量,终究是个变量所以可以改变,如下操作
#include <stdio.h>
int main()
{
const int a=3;
int *p=(int *)&a;
*p=4;
printf("%d\n",a);
return 0;
}
3.在C++中使用const修饰的变量在某些情况下被称之为常量
3.1概念
const 修饰的变量承接的是一个立即数,编译器会对此变量进行优化,把这个变量的值存放在寄存器中,我们把这种方式的变量也称为符号常量。
3.2通过c++和c分别来进行举例说明
3.1.1在c中如果这样写肯定是出不来结果的会报错,因为此时的a是一个变量
#include <stdio.h>
int main()
{
const int a=3;
int arr[a]={1,2,3};
int i=0;
for(i=0;i<3;i++){
printf("%d\n",arr[i]);
}
return 0;
}
3.1.2在c++中如果这样写就可以出来结果,因为此时的a是一个立即数,符号常量,如下
#include <iostream>
using namespace std;
int main()
{
const int a=3;
int arr[a]={1,2,3};
int i=0;
for(i=0;i<3;i++){
printf("%d\n",arr[i]);
}
return 0;
}
3.1.3而且应为此时a是一个立即数所以任何情况下a的值都不会被修改如下a的值还是3
#include <iostream>
using namespace std;
int main()
{
const int a=3;
int *p=(int *)&a;
*p=500;
cout << a << endl;
return 0;
}