c语言为什么整型变量未赋值是随机值,而二维数组未赋值是0

整型变量auot类型的未赋值应该是随机值,auto类型的二维数组中部分数组元素已赋值,未赋值部分为什么默认为0,而不是随机数。

1.在C语言中,“初始化”和“赋值”是两个不同的概念。楼主问题中应该是“初始化”而非“赋值”。
int a = 0; 在声明一个变量的时候指定变量的值,这叫做初始化;
int a; a = 2; 这叫做赋值。
2.auto变量处于运行时堆栈。它的特点:在调用一个函数的过程中,这个函数内部的auto变量才存在,当这个函数调用结束时,这些变量所占用的内存即被收回。如果多次调用一个函数,这个函数内部的auto变量在内存中的地址是不确定的。由于auto变量在内存中的地址不是一成不变的,所以在程序开始前,编译器无法确定它们的值,并不对它们进行初始化。
因此,auto变量未被初始化时,编译器也不知道你想要往这个变量里存什么,所以它的值是不确定的,毫无意义的,等着你在运行时给它进行赋值操作。
3.如果不对一个数组(非全局的、非静态的)进行初始化,这个和上面的变量未初始化一样,编译器不知道你要做什么,所以懒得浪费时间对它们进行初始化。
如果对一个数组进行部分初始化,形如:
int a[10] = {1, 2, 3};
未被初始化的部分a[3]~a[9]便会被编译器初始化为0。我的理解是,这是编译器认为你只关心数组a中前三个数的值,而后面的编译器为了让你省心就帮你初始化为0了,这时候编译器想“反正你都让我把前三个给填上了数,我也不怕麻烦了,后几个我给你填0吧”,于是编译器很大方地挥一挥衣袖把a[3]~a[9]填为0。
但是:
int a[10];
a[0] = 1;
a[1] = 2;
a[2] = 3;
这个时候a[3]~a[9]的值并不是0.因为这是运行时赋值,这个时候编译器已经下班了,所a[3]~a[9]中的值也是不确定的。
4.最后,再说一下全局变量和一个函数内部的静态局部变量,它们并不是存储在运行时堆栈,在程序运行过程中,它们的在内存中地址是确定的,所以编译器就把它们初始化为0。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-04-30
数组变量为全局变量,或被部分初始化,均会出现这种情况。

C语言中,变量在没有显式初始化时,区分变量类型,有如下几种情况:
1 全局变量, 和静态局部变量,未初始化时值默认为0.无论是数组还是变量,都是如此。
2 局部变量,初始值为随机值。
3 数组类局部变量,当被部分初始化时,未被初始化部分,值默认为0。
第2个回答  2015-05-22
1、首先题目是错误的,问题应该是“初始化”而不是“赋值”。
2、其次整型变量和数组在初始化未给值的情况下都会是随机值,而不是你说的数组就是为0.
3、最后还有特殊情况那就是如果数组在初始化的时候有给了几个值,那么其他没有给值的元素都会被编译器置为0.
比如int a[5] = {1, 2};那么编译器会帮你把后面的三个元素也置为0,只有在这种情况下才是0,其他的情况都是随机值。
第3个回答  2012-03-11
整型变量未赋值时系统会默认上一次的值,而二维数组需要开辟新的内存空间,初始值一定为0的追问

整形变量未赋过值,上一次的值应该是什么呢?

追答

看你是否上次开辟过该内存,开辟过的就是上次的那个

第4个回答  2012-03-11
因为你把数组定义成静态的了 static 默认初始化为0变量没有定义成静态的
要不你把变量 也定义成静态的试试追问

数组是auto类型的,未定义成静态的。变量也是auto类型的。

追答

数组 不会是定义的全局变量了? 全局变量存储在静态存储区,会默认为0

c语言为什么整型变量未赋值是随机值,而二维数组未赋值是0
1.在C语言中,“初始化”和“赋值”是两个不同的概念。楼主问题中应该是“初始化”而非“赋值”。int a = 0; 在声明一个变量的时候指定变量的值,这叫做初始化;int a; a = 2; 这叫做赋值。2.auto变量处于运行时堆栈。它的特点:在调用一个函数的过程中,这个函数内部的auto变量才存在,当...

C语言定义一个整型二维数组,若没有赋值,系统自动给的是0吗??
C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0。如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0。

C语言定义一个整型二维数组,若没有赋值,系统自动给的是0吗??
C语言规定,普通数组没有赋初值,默认的数组元素值是随机数,不是0。如果在定义数组时,数据类型前面加上关键字static,数组变成了静态数组;或者把数组定义在函数的外面,成为全局变量数组,这时数组元素的值自动赋值为0。

c语言中的未赋值参数是否默认为0
不确定。但一般情况是,静态变量(static)与全局变量都默认为0,局部变量值不确定(很多情况下不为0)。你可以测试一下:include <stdio.h> int a; \/\/全部变量 int main(){ static int b;int c;printf("a = %d, b = %d, c = %d\\n", a, b, c);return 0;} 变量在定义时就将其初...

C语言,我定义了变量(未赋值)调试的时候t=0这是为什么?调试了很多次了...
了解这个有什么特别作用么?对于未赋值对象它的值是不确定的,这里不确定不是说它必须是随机值或者必须每次都不一样.具体是什么值是要看对应的编译器及C++ runtime的具体实现,在你这个编译器是0,换个地方就可能是别的值.需要理解"为什么"可能只能反向工程这种编译器了,但是这个知识本身毫无价值,估计没人...

c语言里面 0是什么意思
在C语言中,0表示的是数字0,也可以理解为空值或者未赋值。在C语言中,内存中的所有数据都会被初始化为0,所以如果一个变量没有被赋值,它的默认值就是0。在程序中,我们可以利用这个特性来初始化变量或者清空内存。0在C语言中也有其他的含义,比如用来表示false或者true。在C语言中,只有0被认定为...

c语言,当数组某些元素未被赋值时其值为多少?
数组未初始化有两种情况:1,未初始化,其值有两种可能:一种是全局数组,被编译器初始化为0。一种是局部数组,为随机数。2, 已初始化,局部数组和全局数组,已初始化,未赋值的数组都会被赋值为0。

c语言二维数组,他们的值怎么不一样啊
因为你初始化只给第一个数组赋了值 其他未初始化,系统默认多会给它赋0

c语言数组初始化未赋值则默认是任意还是0
如果赋值了一项其余就是0,如果是int a[10]={1}其余各项就是0;如果只有int a[10]那么就是随机数

VB中,没有赋值的整型变量,系统默认值是什么?
在Visual Basic(VB)编程语言中,未赋值的整型变量的默认值是0。这适用于基本的整型、长整型以及浮点数类型,无论它们是单精度还是双精度。值得注意的是,布尔型变量的默认值为False。在VB中,所有系统默认值都是0,这包括了整型、长整型、浮点型和布尔型。这表示,若你在代码中声明一个未赋值的变量...

相似回答