未在定义语句中赋初值的auto变量和static变量的初值都是随机值。请问这句话错在哪里?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未在定义语句中赋初值的auto变量和static变量的初值都是随机值。请问这句话错在哪里?相关的知识,希望对你有一定的参考价值。
C语言标准里面,auto变量的初始值没有做要求,一般是随机的,它分到那块内存原来是什么,还是什么。
static变量是静态变量,如果定义时未对其赋初值,编译时系统对数值型static变量赋值为0,对字符型变量赋值空。
static的三条重要作用:
(1)最主要功能是隐藏。
(2)因为static变量存放在静态存储区,第二个作用是保持变量内容的持久。
(3)默认初始化为0。在静态数据区,内存中所有的字节默认值都是0x00。
扩展资料
全局变量的存在主要有以下一些原因:
1、使用全局变量会占用更多的内存(因为其生命期长),不过在计算机配置很高的今天,这个不应该算什么问题,除非使用的是巨大对象的全局变量,能避免就一定要避免。
2、使用全局变量程序运行时速度更快一些(因为内存不需要再分配),同样也快不了多少。
3、对于局部变量的名字空间污染,这个在不使用太多变量时是可以避免的。
4、当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。
5、还可以用extern在函数外对全局变量声明,使全局变量的作用域从声明处到文件的结束。
6、全局变量的优先度低于局部变量。
总之,全局变量可以使用,但是全局变量使用时应注意的是尽可能使其名字易于理解,而且不能太短,避免名字空间的污染;避免使用巨大对象的全局变量。
参考技术A 出自《2011全国计算机二级C++笔试练习习题(3)》显然这种说法是错误的,static变量是静态变量,程序启动时就在全局区分配了空间,而且被初始化为0或者空(NULL)本回答被提问者采纳 参考技术B auto变量只有调用的时候才赋值,调用结束就释放,所以无初值 参考技术C C语言标准里面,auto和static变量的初始值都没有做要求。
auto一般肯定是随机的,他分到那块内存原来是什么,还是什么。
static由于是静态的,一般加载的时候都初始化为0(大部分系统是这样的,并不绝对),如果是考试题,可以认为是随机的吧 参考技术D static变量的初值不是随机值追问
请问能再详细点吗?
追答static 变量 初始值默认是0
变量存储类型(auto static extern)
auto 动态存储类型变量(函数内部变量存储默认为 auto型)
auto只用于函数内部定义,单片机在执行这个函数时为它分配内存地址,当函数执行完毕返回后,auto变量会被销毁,再次进入这个函数时,它的初值是不确定的,必须对她重新进行初始化。auto变量是局部变量,只允许在定义它的函数内部使用,在函数外的其他地方都不能使用。由于auto变量在定义它的函数以外的任何地方都是不可见的,所以允许在这个函数以外的其他地方或是其他函数内部定义同名的变量,它们之间是不会发生冲突的,因为他们都有自己的区域性,在实际的代码中一般都省略这个关键词,函数的形式参数默认也是auto。
auto变量定义格式为:
auto 数据类型 变量名;
static静态存储类型变量
static可用于函数内部变量定义,也可用于函数外部变量定义。在函数内部,static的基本用途是允许一个变量在重新进入这个函数是能够保持原来的值,static静态变量在程序运行期间自始至终占用被分配的存储地址。在函数内部用static定义的变量在函数初次运行时进行初始化工作,且只操作一次,以后每次调用函数时不再重新赋初值而只引用上次函数调用结束时的值,如果程序代码没有对static变量赋初值,编译器会自动赋值0或空字符。在函数内部使用static定义的变量时局部变量,只能在定义该变量的函数内使用该变量,推出函数后,尽管静态局部变量还继续存在,但不能使用它。
static还有第二种含义,为了限制全局变量或函数的作用域,全局变量或函数前加static使得函数变成静态函数,但此处static的含义不是指定存储类型,而是对函数的作用域局限于本文件,其他文件不可使用,所有又称内部函数。使用内部函数的好处是不同的人编写的不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数产生同名冲突。使用static定义的静态全局变量和外部全局变量的差别在于,外部全局变量可以同时给多个文件使用,而静态全局变量则只能给定义此变量的文件使用。对于全局变量,不论是否使用static限制(即全局变量和静态全局变量),它们都一直占用内存地址不释放。
把局部变量改变为静态局部变量后改变了他的生存期,把全局变量改变为静态全局变量后改变了他的作用域,限制了他的适用范围。
静态变量定义格式为:
static 数据类型 变量名;
extern外部变量
在所有函数之外定义的变量称之为全局变量,全局变量可以在定义时赋初值,若不赋初值,则系统自动定义它们的初值为0。有static限制的全局变量称为内部全局变量,无static限制的全局变量成为外部全局变量。在代码量大的程序中,一般会把代码分类放到多个*.c文件中,如果要在一个C文件中使用另外一个C文件中已经定义的全局变量,就必须使用extern关键字。
extern是变量声明关键字,而非定义,是引入其他C文件中已定义的非static全局变量,比如:“extern int a;”这里声明了一个变量a,并把这个变量的类型和变量名告诉编译系统是编译系统不再为它分配内存地址,这个a是在其他文件已经定义并且分配了内存地址的。外部变量声明语句的位置可以是在引用它的函数的内部,也可以在应用它的函数的外部。如果变量声明在函数外部,那么同一个C文件内的所有函数都可以使用这个外部变量;反之如果在函数内部,那么只有这一个函数可以使用该变量。
注意,extern和static本身就是对立的关键字,使用extern是为了不同文件都可使用外部某个变量。
外部变量声明格式为
extern 数据类型变量名;
以上是关于未在定义语句中赋初值的auto变量和static变量的初值都是随机值。请问这句话错在哪里?的主要内容,如果未能解决你的问题,请参考以下文章