c - C中的局部int与全局int
问题描述
我读到:
在 C 中,局部变量以未知值开头
我决定检查一下,这就是我所做的:
问题 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);
}
解决方案
局部变量以未知值开头
不完全正确。具有自动存储持续时间的局部变量;static
变量初始化为零。main()
碰巧的是,代码片段中的所有局部变量都有自动存储期限。
为什么未知值是 1,或者为什么全局 int 是 0 而本地 int 是 1?
全局变量具有静态存储持续时间。这意味着它们在程序启动时被隐式初始化为零。具有自动存储持续时间的局部变量在显式初始化之前具有未定义的值。
为什么每次新开始的本地 unsigned_int 都不同?
这对你来说是未定义的行为。所有的赌注都取消了。
全局/本地字符是 ' ' 吗?
不。全局在程序启动时char
被隐式初始化;'\0'
本地char
有一个未定义的值。
为什么全局和本地以不同的值开始(如果它们没有初始化)?为了什么?
由于具有静态存储持续时间和自动存储持续时间的对象初始化规则。
推荐阅读
- reactjs - 如何从盖茨比给 Hasura 写信?
- html - 如何从 div 列表中突出显示 2 个选定的 div
- angular - 如何根据角度中的单选按钮选择来增加变量
- angular - 带有动态url的routerLinkActive不起作用Angular 9
- python - Python - 在变量中存储大数组
- python - 执行python文件的shell脚本
- java - 将 SOAP 服务从 websphere 迁移到 tomcat
- javascript - 如何通过单击具有相同类的 100 个框中的任何一个来打开模式?
- javascript - 在基于 laravel 的引导程序上通过 js 发送表单给我一个错误
- javascript - 使用选择值过滤 jQuery 数据表