const 在 C 和 C++ 中的区别

1 C 中的 const 内存分配

1.1 修饰全局变量

#include<stdio.h>

const int n = 5;

int main(){
    int* p = (int*)(&n);
    *p = 10;
    printf("%x\n", &n);
    printf("%x\n", p);
    printf("%d\n", n);
    printf("%d\n", *p);
    return 0;
}

C语言中const修饰的全局变量分配在只读数据区中,所以当通过指针去修改值时会发生段错误:

 

 

1.2 修饰局部变量

#include<stdio.h>

int main(){
    const int n = 5;
    int* p = (int*)(&n);
    *p = 10;
    printf("%x\n", &n);
    printf("%x\n", p);
    printf("%d\n", n);
    printf("%d\n", *p);
    return 0;
}

在上面的代码中,const 修饰的 n 是一个局部变量,所以分配在栈区,可以通过指针去修改其值。

 


 

 

2 C++ 中的 const 内存分配

在C++中,用const修饰的常量会被写入符号表中,如果出现了以下两种情况,则会为它分配内存空间:

  1. 对 const 常量使用了 extern,需要在其他文件中使用
  2. 对 const 常量使用了 & 操作符,要取地址
#include<iostream>

const int n = 5;

int main(){
    int* p = (int*)(&n);
    *p = 10;
    printf("%x\n", &n);
    printf("%x\n", p);
    printf("%d\n", n);
    printf("%d\n", *p);
    return 0;
}

现在这段代码中 n 的输出结果依然是 5 :

但是如果 n 是一个局部变量,n 的输出依然是 5 ,但是  *p 的输出会变为 10。

 

 

 

References:

  1. 【C++深度解析】2、C/C++ 中的 const
  2. const在C与C++中的区别
posted @ 2022-04-18 10:58  Kayden_Cheung  阅读(88)  评论(0编辑  收藏  举报
//目录