Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中未初始化数据的位置_C - Fatal编程技术网

C语言中未初始化数据的位置

C语言中未初始化数据的位置,c,C,我想知道未初始化的数据在修改后将存储在哪里 比如说, 所有初始化为代码中某个值的变量都将存储在.data部分 所有未初始化的变量将由编译器初始化为0,并存储在.bss节中 现在,假设我在代码中定义了一个由10个整数组成的数组。但是我没有指定这个数组的元素。因此,编译器将数组的所有整数初始化为0,并在.bss节中保留40个字节 在此之后,我将一些数据写入数组,它是否会修改.bss节本身中的数据 #include <stdio.h> #include <math.h> in

我想知道未初始化的数据在修改后将存储在哪里

比如说,

所有初始化为代码中某个值的变量都将存储在.data部分

所有未初始化的变量将由编译器初始化为0,并存储在.bss节中

现在,假设我在代码中定义了一个由10个整数组成的数组。但是我没有指定这个数组的元素。因此,编译器将数组的所有整数初始化为0,并在.bss节中保留40个字节

在此之后,我将一些数据写入数组,它是否会修改.bss节本身中的数据

#include <stdio.h>
#include <math.h>

int main(int argc, char **argv)
{
    int i;

    /* 10 integers are initialized to 0 and stored in the .bss section */

    unsigned int numbers[10];

    /* write data to array */

    for(i=0;i<10;i++)
    {
        numbers[i]=pow(2,i);
    }
#包括
#包括
int main(int argc,字符**argv)
{
int i;
/*10个整数初始化为0并存储在.bss节中*/
无符号整数[10];
/*将数据写入阵列*/
对于(i=0;i你的假设

所有未初始化的变量将被初始化为0 “由编译器执行”

不正确。它未初始化,变量的内存已分配,但内容未初始化。

您的假设是

所有未初始化的变量将被初始化为0 “由编译器执行”


不正确。它未初始化,分配了变量的内存,但内容未初始化。

该.bss包含全局静态未初始化变量。在您的示例中,数组将放置在堆栈上。

该.bss包含全局静态未初始化变量初始化变量。在您的示例中,数组将放置在堆栈上。

在您的示例中,数组在
堆栈上声明


因此,在您的示例中,
堆栈
上声明了数组,而
.bss

中没有任何内容

因此,
.bss

所有未初始化的变量将由编译器初始化为0,并存储在.bss节中

否,只有未初始化的全局变量和静态变量将被初始化为0

所有未初始化的变量将由编译器初始化为0,并存储在.bss节中


不,只有未初始化的全局变量和静态变量才会初始化为0。

您在这里混淆了两件事。如果您谈论它
.bss
.data
部分,您谈论的是局部变量(如示例中)与全局/静态变量

本地变量(如示例中所示)在堆栈上分配。不涉及
.bss/.data
。此数据将不斜体,并且具有随机值,不管堆栈上的值是什么


对于全局/静态未初始化变量,当程序启动时,它们被初始化为0。

您在这里混淆了两件事。如果您谈论它
.bss
.data
部分,您谈论的是局部(如示例中)变量与全局/静态变量

本地变量(如示例中所示)在堆栈上分配。不涉及
.bss/.data
。此数据将不斜体,并且具有随机值,不管堆栈上的值是什么


对于全局/静态未初始化变量,当程序启动时,它们被初始化为0。

在前面的响应中已经说过,在您的示例中,数字数组将存储在堆栈上,而不是.bss节上,并且只有全局和静态变量将被初始化为0,如果它们是数值类型或对象为NULL

下面的示例显示了不同变量的存储位置

int abc = 1;                            ---->   Initialized Read-Write Data
char *str;                              ---->   BSS
const int i = 10;                       ----->  Initialized Read-Only Data

main()
{
    int ii,a=1,b=2,c;                   ----->  Local Variables on Stack

    char *ptr;
    ptr = malloc(4);                     ------> Allocated Memory in Heap

     c= a+b;                             ------> Text

}

还有一个很好的描述

在前面的回答中已经说过,在您的示例中,数字数组将存储在堆栈上,而不是.bss部分,并且只有全局和静态变量将被初始化为0,如果它们是数值类型或对象为NULL

下面的示例显示了不同变量的存储位置

int abc = 1;                            ---->   Initialized Read-Write Data
char *str;                              ---->   BSS
const int i = 10;                       ----->  Initialized Read-Only Data

main()
{
    int ii,a=1,b=2,c;                   ----->  Local Variables on Stack

    char *ptr;
    ptr = malloc(4);                     ------> Allocated Memory in Heap

     c= a+b;                             ------> Text

}

还有一个很好的描述

它将修改数组中的数据,无论数据当前存储在何处。此信息可能重复?此信息也可能有助于解决将哪些值分配给未分配数组的问题。它将修改数组中的数据,无论数据当前存储在何处。此信息可能重复还有一个问题是什么值分配给未分配的数组。谢谢。我知道了:)是的,局部变量将在堆栈上分配。谢谢。我知道了:)是的,局部变量将在堆栈上分配。