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;
}
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;
}
相关文章推荐
- 【C语言 C++】简单关键字Register,Const,Static,Volatile,typedef,Define的理解
- C语言与C++中static,const 关键字的区别
- C++和C语言const区别关键字总结
- 详解C++中的const关键字及与C语言中const的区别
- c/c++中的const关键字
- C++的const关键字
- C++ 中 const 关键字使用详解
- [转]C/C++中关键字static,const,inline,define,typedef的用法及其意义
- C++关键字const用法详解
- C和C++中const关键字的区别
- C语言const介绍(const关键字说明)
- C++基本功:全面掌握const、volatile和mutable关键字
- C++关键字const简介
- C++中Const关键字总结
- C语言const关键字作用
- C++基本功:全面掌握const、volatile和mutable关键字
- C++基本功: 全面掌握const, volatile 和 mutable关键字
- C++基本功:全面掌握const、volatile和mutable关键字
- C++中”const“关键字使用详解
- c++中const关键字使用详解