您的位置:首页 > 编程语言 > C语言/C++

C语言与C++中const关键字的异同

2017-04-17 17:41 330 查看
在C语言中,const被理解为:一个不能改变的普通变量,编译器会为其分配内存。所以:

const int a=10;

int array[a];

会编译不通过。

其次,在C语言中,const是一个全局只读变量,且是外部连接。

再次,在C语言中,局部const存放在栈区,可通过指针间接修改const的值。

void testc()

{

const int a=10;

int *pa=(int*)&a;

*pa=20;

printf(“a=%d,*pa=%d\n”,a,*pa);//输出a=20,*pa=20

}

在C++中,编译器不会被const分配内存。但,若对const进行取地址操作或定义为extern,则会为其创建内存,与C语言不同的是,C++将const作用于整个文件,默认为内部连接。

C++会对const变量区别对待:

1.对于基础数据类型

void testcpp()

{

const int a=10;

int *pa=(int*)&a;

*pa=20;

cout<<”a=”<<a<<endl;//a仍然等于10

cout<<”*pa=”<<*pa<<endl;

//*pa等于20,编译器进行了优化,将值替换到访问的位置

}

2.对于基础数据类型,如果用一个变量初始化const变量,如果const int a=b,那么就会给a分配内存

void testcpp2()

{

int b=10;

const int a=b;

int *pa=(int*)&a;

*pa=20;

cout<<”a=”<<a<<endl;

cout<<”*pa=”<<*pa<<endl;

//输出*pa=20,a=20

}

3,。对于自定义数据类型也会分配内存
struct Person

{
int age;
char name[20];

};

int main()

{
const Person per1;
//per1.age = 10;错误,不能修改
Person* per=(Person*)&per1;
per->age = 30;
strcpy(per->name, "xiaoxin");
std::cout << "age=" << per1.age << std::endl;
std::cout << "name:" << per1.name << std::endl;
system("pause");
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: