一:

const只读变量

—— const修饰的变量是只读的,本质还是变量

—— const修饰的局部变量在栈上分配空间

—— const修饰的全局变量在全局数据区分配空间

—— const只在编译期有用,在运行期无用

注:———————————————————————————————————

const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边

在现代C语言编译器中,修改const全局变量将导致程序崩溃

标准C语言编译器不会将const修饰的全局变量存储与只读存储区,而是存储于可修改的

全局数据区,其值依然可以改变

——————————————————————————————————————

二:

const分析

const分析

 

三:

const修饰的局部变量

const分析

const分析

四:

const修饰的全局变量

const分析

const分析

五:

const修饰的全局变量

const分析

const分析

g_cc这个全局变量 由于const,被存储于 只读存储区, 也就是gcc编译器将const修饰的全局变量存储于只读存储区,而不是普通的全局数据区, 那么通过指针p修改g_cc的时候,修改的是只读存储区里面的内存,程序出现崩溃

 

在现代C语言编译器中,修改const全局变量将导致程序崩溃

标准C语言编译器不会将const修饰的全局变量存储与只读存储区,而是存储于可修改的

全局数据区,其值依然可以改变

 

六:

const分析

七:

const 修饰函数参数和返回值

—— const修饰函数参数表示在函数体内不希望改变参数的值

—— const修饰函数返回值表示返回值不可改变,多用于返回指针的情形

注:——————————————————————————————————

C语言中的字符串字面量存储与只读存储区中,在程序中需要使用const char*指针

example:

           #include <stdio.h>

           int main()

           {

                      const char* s = "XXXX XXXX"; //字符串字面量

                      return 0;

           }

————————————————————————————————————

八:

总结:

           |--------> 标准C编译器 ------> const变量:只读,值可改变

const  |---------> 现代C编译器 |-------> const全局变量:只读,值不可改变

                                               |-------> const局部变量 |-------->  static局部变量:只读,值不可改变

                                                                                   |---------> 普通局部变量:只读,值可改变

 

相关文章:

  • 2021-06-24
  • 2021-12-21
  • 2021-10-21
  • 2021-10-11
  • 2021-12-22
  • 2021-10-17
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-14
  • 2021-05-18
  • 2022-01-15
  • 2021-12-22
  • 2021-09-16
  • 2021-12-27
  • 2018-12-13
相关资源
相似解决方案