前言:
眼前小伙伴们对“可以修饰局部变量”都比较讲究,小伙伴们都需要了解一些“可以修饰局部变量”的相关文章。那么小编同时在网络上收集了一些对于“可以修饰局部变量””的相关知识,希望小伙伴们能喜欢,你们快快来学习一下吧!废话不多说,先看const修饰全局变量的情况,代码及运行情况如下:
#include <stdio.h>
const int v1=1;
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局部变量)