• 微信号
  • 微信号
您当前的位置:首页 > 学海无涯 > 茑语花香>C语言变量的定义位置以及初始值

C语言变量的定义位置以及初始值

孤峰 孤峰家 2023-06-18 83人阅读

在函数外部定义的变量叫做全局变量?Global Variable??在函数内部定义的变量叫做局部变量?Local Variable??它们的区别将会在《C语言函数》一章中详细说明?这里大家只要记住?变量也可以在 **in 函数外面定义即可?本节我们重点讲解的是局部变量。 局部变量的定义位置

为了让编译器方便给变量分配内存?C89 标准规定?所有的局部变量?函数内部的变量?都必须定义在函数的开头位置?在定义完所有变量之前不能有其它的表达式。

这种规定太过死板?虽然变量定义在函数开头?但是使用变量可能在函数的尾部?如果函数比较长?那么定义变量和使用变量的距离就有点远了?编写代码或者阅读代码时就要频繁得向前翻看代码?非常不方便?所以后来的 C99 标准就取消了这个限制。

GCC、LLVM/Clang 更新比较快?已经支持到 C99 标准了?局部变量可以在函数的任意位置定义。但是微软编译器更新就比较慢了?VC6.0、VS2010 对 C99 的支持都非常不好?变量仍然要定义在函数的开头位置?不过 VS2015 已经部分支持 C99 标准了?已经取消了这个限制?局部变量的定义位置就随意了。

变量的默认初始值

一个变量?即使不给它赋值?它也会有一个默认的值?这个值就是默认初始值。

对于全局变量?它的默认初始值始终是 0?因为全局变量存储在内存分区中的全局数据区?我们将在《C语言内存精讲》中讲解??这个区域中的数据在程序载入内存后会被初始化为 0。

而对于局部变量?C语言并没有规定它的默认初始值是什么?所以不同的编译器进行了不同的扩展?有的编译器会初始化为 0?有的编译器放任不管?爱是什么就是什么。请看下面的代码?

在 VS2010 下的运行结果=

a=1323060, f=0.000000, c=115

在 VS2015 下的运行结果=

a=0, f=0.000000, c=109

在 Linux GCC 下的运行结果=

a=32767, f=0.000000, c=0

在 Xcode 下的运行结果=

a=24630, f=0.000000, c=95

在 iOS 手机编译器下的运行结果=

a=0, f=0.000000, c=0

你看=不同的编译器对局部变量的处理差异很大=有的将 int 类型初始化为 0=有的将 char 类型初始化为 0=有的全部初始化为 0=有的全部放任不管。这就告诉我们=使用局部变量之前一定要手动初始化=赋值==千万不敢假设它的值就是 0=不初始化就使用局部变量会导致匪夷所思的结果。

使用未初始化的局部变量有很大风险=很多编译器会给出警告=提醒程序员注意。

那么=为什么不初始化为 0 的局部变量会有一个奇怪的值=放任不管又意味着什么呢=

变量定义时会给变量分配一块内存空间=如果不对变量进行初始化=那就意味着不对这块内存进行写入操作=这块内存的数据会保持不变=依然是分配之前的数据。这样的数据可能是当前程序在之前的运行过程中产生的=也可能是之前运行过的其它程序产生的=我们根本无法预测这样的数据到底是什么=所以你会看到它是一个毫无意义的值=这样的值是随机的=是垃圾值=没有使用价值。

更改上面的代码=将所有的局部变量手动初始化为 0=

大家在以后的编程过程中=请尽量养成这个良好的习惯。

转载:感谢您阅览,转载请注明文章出处“来源从小爱孤峰知识网:一个分享知识和生活随笔记录的知识小站”。

链接:C语言变量的定义位置以及初始值http://www.gufeng7.com/niaolang/462.html

联系:如果侵犯了你的权益请来信告知我们删除。邮箱:119882116@qq.com

标签: