专业编程基础技术教程

网站首页 > 基础教程 正文

c/c++面试,const修饰全局变量与局部变量的区别,新手必看

ccvgpt 2024-08-08 12:56:42 基础教程 11 ℃

废话不多说,先看const修饰全局变量的情况,代码及运行情况如下:

#include <stdio.h>

const int v1=1;

c/c++面试,const修饰全局变量与局部变量的区别,新手必看

int main(){

int *p2v1=&v1;

*p2v1=2;

return 0;

}


我们对程序进行反汇编分析,汇编代码如下:

Disassembly of section .rodata:

0000000000400580 <_IO_stdin_used>:

400580: 01 00 add %eax,(%rax)

400582: 02 00 add (%rax),%al

0000000000400584 <v1>:

400584: 01 00 add %eax,(%rax)

...

我们发现v1变量处于只读内存数据段,我们的程序去修改只读内存,肯定就crash了。

我们再看const修饰局部变量的demo,由于局部变量存储于栈中,我们是完全可以去修改它的。代码及运算结果如下:

#include <stdio.h>

int main(){

const int v1=1;

int *p2v1=&v1;

*p2v1=2;

return 0;

}


那么c++中也要修改v1局部变量要如何操作呢,不卖关子了,代码如下

#include <stdio.h>

int main(){

const int v1=1;

int *p2v1=(int *)&v1;

*p2v1=2;

return 0;

}


(友情提示c++中const局部变量很诡异,具体见我的另一篇文章c++揭秘,诡异的const局部变量

Tags:

最近发表
标签列表