大家好,今天小编关注到一个比较有意思的话题,就是关于c语言栈的初始化的问题,于是小编就整理了4个相关介绍c语言栈的初始化的解答,让我们一起看看吧。
c栈的使用?
struct
node;
typedef
strcut
node
*
position;
C语言的赋值和初始化?
语法上的初始化是指对象定义时,对应的分配空间之后对于值的操作。c语言中,静态和全局变量默认置0,有初始化列表的复制初始化列表的值到空间(如有不足,剩余部分置0),局部自动变量可以不初始化(调试器参与时可能被隐式地初始化为其它的值("debugmagicnumber"),例如默认情况下microsoftc/c++debugger会把栈中未初始化的字节置为0xcc)。
赋初值一般而言是指逻辑意义上的初始化。在c语言中,由于初始化的语法是“=”后加初值,所以“赋初值”基本上就是指语法上的初始化。不过随着语言的发展,“赋初值”的意义发生了扩大。对有构造语义但又允许不初始化而不产生编译错误的程序设计语言而言,两者有些微妙的差别。例如c++的构造函数中,用若干个成员名和括号括起来的初始化值构成的初始化列表是语法上的初始化(也可能是逻辑意义上的初始化,如果没有被构造函数体内的值覆盖),而构造函数体中对成员的赋值语句是逻辑上的初始化但不是语法上的初始化。
冰的悸动错误:
1.“程序开始时进行初始化”的说法仅仅适用于静态或全局变量,而不适于局部自动变量。局部自动变量在函数调用时才能被初始化。
2.“但是根据编译器的不同有些编译器会自动赋初值0或其他”——这在iso/iecc语言标准中不是由实现定义的行为,如果一个编译器符合标准,那么行为就是明确的,即视此初始化的对象是否为全局对象来判断隐式初始化置0还是不进行初始化——从下面的函数定义来看这里应该var2是全局变量,会被置0。非标准编译器则另当别论(但是我还没见过会在这点上没事找茬的)。
c语言初始化时间?
C语言中有数据有两种初始化时间。 1. 在main函数之外定义的数据。 一般来说都是在main函数之前声明的数据,这些数据在程序创建初期就申请好了内存,放在堆当中,在内存当中的字节码都清0。 2. 在main函数之内定义的数据。 有两种,一种是使用栈空间,自动分配释放的内存。另外一种是使用动态分配函数,在堆空间中,手动分配释放的内存。这两种分配都不会初始化数据(除了calloc函数)。需要人为手动初始化数据,否则运行结果不正确。
变量的初始化?
有些编程语言不一定需要程序员初始化变量(比如VB),因为如果你不初始化,那么编译器/解释器会自动帮助你初始化(会将变量数据类型的默认初始值赋给变量)。
即使是C语言这种,也有不需要初始化的变量,例如静态变量static,规则如下:对于原生数据类型,以对应类型的零值进行初始化;对于类中的静态对象,由其默认的构造函数来进行初始化。
另外全局变量,还有用calloc()函数分配到的空间,都会被自动初始化。所以题主你理解的变量必须要初始化其实只是由于在C或者类似语言中,局部的自动变量和寄存器变量是从堆、栈或者寄存器上临时分配(重复使用),我们不知道之前的代码究竟对这个空间做过什么,所以值会是随机的。
除非编译器设为调试模式(debug),此时编译器往往会自动对局部变量进行初始化(0xcc),这也是有时调试模式编译运行成功但是发行模式(release)编译运行出错的原因。
全局变量和静态变量之所以不需要初始化是因为,作用范围为全局的变量(包括全局和静态)会从全局变量区分配空间,而由于RAM存储器特性,这些变量会被自动清零。
到此,以上就是小编对于c语言栈的初始化的问题就介绍到这了,希望介绍关于c语言栈的初始化的4点解答对大家有用。