首页 > 解决方案 > C中的局部int与全局int

问题描述

我读到:

在 C 中,局部变量以未知值开头

我决定检查一下,这就是我所做的:

同一程序的三个结果:1 , 2 , 3

问题 1:为什么 1 中的值未知,或者为什么 globalint为 0 而 localint为 1?

问题2:为什么unsigned int每次新开始的地方都不一样?

问题3:全局/本地是char''吗?char ch = ' '; // something like that

问题 4:为什么 global 和 local 以不同的值开始(如果它们没有初始化)?为了什么?

源码:(我用clang(v10.0.0)编译)

#include <stdio.h>

int global_int;
unsigned int global_unsint;
char global_char;

int main()
{
  int local_int;
  unsigned int local_unsint;
  char local_char;

  printf ("Global int: %d \t unsigned_int: %u \t char: %c\n", global_int, global_unsint, global_char);
  printf ("Local int: %d \t unsigned_int: %u \t char: %c\n", local_int, local_unsint, local_char); 
}

标签: cglobal-variableslocal-variables

解决方案


局部变量以未知值开头

不完全正确。具有自动存储持续时间的局部变量;static变量初始化为零。main()碰巧的是,代码片段中的所有局部变量都有自动存储期限。

为什么未知值是 1,或者为什么全局 int 是 0 而本地 int 是 1?

全局变量具有静态存储持续时间。这意味着它们在程序启动时被隐式初始化为零。具有自动存储持续时间的局部变量在显式初始化之前具有未定义的值。

为什么每次新开始的本地 unsigned_int 都不同?

这对你来说是未定义的行为。所有的赌注都取消了。

全局/本地字符是 ' ' 吗?

不。全局在程序启动时char被隐式初始化;'\0'本地char有一个未定义的值。

为什么全局和本地以不同的值开始(如果它们没有初始化)?为了什么?

由于具有静态存储持续时间和自动存储持续时间的对象初始化规则。


推荐阅读