在c语言中给变量赋初值有啥作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在c语言中给变量赋初值有啥作用相关的知识,希望对你有一定的参考价值。
语法上的初始化是指对象定义时,对应的分配空间之后对于值的操作。c语言中,静态和全局变量默认置0,有初始化列表的复制初始化列表的值到空间(如有不足,剩余部分置0),局部自动变量可以不初始化(调试器参与时可能被隐式地初始化为其它的值("debugmagic
number"),例如默认情况下microsoft
c/c++
debugger会把栈中未初始化的字节置为0xcc)。
赋初值一般而言是指逻辑意义上的初始化。在c语言中,由于初始化的语法是“=”后加初值,所以“赋初值”基本上就是指语法上的初始化。不过随着语言的发展,“赋初值”的意义发生了扩大。对有构造语义但又允许不初始化而不产生编译错误的程序设计语言而言,两者有些微妙的差别。例如c++的构造函数中,用若干个成员名和括号括起来的初始化值构成的初始化列表是语法上的初始化(也可能是逻辑意义上的初始化,如果没有被构造函数体内的值覆盖),而构造函数体中对成员的赋值语句是逻辑上的初始化但不是语法上的初始化。
冰的悸动
错误:
1.“程序开始时进行初始化”的说法仅仅适用于静态或全局变量,而不适于局部自动变量。局部自动变量在函数调用时才能被初始化。
2.“但是根据编译器的不同有些编译器会自动赋初值0或其他”——这在iso/iec
c语言标准中不是由实现定义的行为,如果一个编译器符合标准,那么行为就是明确的,即视此初始化的对象是否为全局对象来判断隐式初始化置0还是不进行初始化——从下面的函数定义来看这里应该var2是全局变量,会被置0。非标准编译器则另当别论(但是我还没见过会在这点上没事找茬的)。 参考技术A 如果变量不赋初始值,则它的值是不确定的,容易造成结果出错
技术博客
在写第一题时,由于粗心大意,再输入count时没有将初值赋0,最后结果计算出来的次数居然有4000多次。后来将count的初值赋0后,程序计算就没有再出现问题。
所以在此重要讲一下C语言中的初值。
C语言在运行时,要先对全局变量赋初值,如果题中没有指定初值的数值,则认定函数的初值为0。(即每个C语言表达式都会产生一个值,例如:a=9,就相当于将9放到了a里,同时该程序也会产生一个值9)当执行到该函数时才对函数的局部赋值,如果没有对函数进行赋初值,C语言是不会替你初始化变量的,所以你的变量值是不确定的。相当于在执行赋 值语句,所以计算不出正确答案。
以上是关于在c语言中给变量赋初值有啥作用的主要内容,如果未能解决你的问题,请参考以下文章