C++中的const的内存分配问题

     在c++我们知道一般是采用const来进行替代#define的。

   例如:

      

const int N=3;//注意采用的是赋值的形式并且末尾有分号
#define N 3

     在C中我们知道#define进行预定义的某个数是不(谢谢网友,打字问题哈哈)分配内存的,其文件在编译预处理过程中就会用定义好的数据去替代文中的符号。

    但是const却是不一样的,一般情况下编译器也是不为const创建空间的,只是将这个定义的数字保存在符号表中的。但是在下列几种情况下编译器会为const定义的常量分配内存的。

  1.使用了extern头

extern const int N=3;
因为使用了extern我们将可能在外部文件使用N,而const默认的是内部链接,所以我们必须要为之分配内存的。

2.取地址操作

#include
using namespace std;
 const int M=3;
int main()
{
const	int *p=&M;//当编译器发现有对const定义的常量进行取地址操作时候会对M进行内存分配,
                  //注意这个地址是const int*类型的,地址中的内容不可以改变的
int *pp=(int*)(&M)//此处我们将const int*类型强制转化成int * 但是对于*pp的任何赋值操作还是会报错的,
                  //因为本质上的M是常量不可改变的,这也是const的优点
	cout<<*p<

3.const定义的常量未知的时候,这是#define无法实现的。

#include
using namespace std;
int main()
{
const int b=cin.get();//此处const定义的b是未知的所以要为它分配内存,但是一旦分配就不可以改变的。
                      //但是如果读者此处想在利用未知的const常量来定义数组还是会报错的。
                     //即int array[b]是不行的,因为编译器在从上往下走的时候是要确定数组的大小的
                    //但是采用new操作就不会报错的int *array=new int(b);

	cout<


你可能感兴趣的:(C/C++/JAVA)