请问 全局变量赋初值是在什么阶段

qq_38061756 qq_38061756 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我所理解的全局变量是存储在静态存储区中,用户在定义时可以赋初值,如果不赋初值默认为0。
但是我在网上看到很多人说,全局变量的赋值是在编译时进行的。如果这样说编译一个可执行程序,重复运行main函数,全局变量只会赋一次初值,因为没有再重新编译过。这样如果main函数中对全局变量进行++操作,则运行几次main函数,全局变量应该就会加几次,但是通过测试并非如此。在linux上gcc编译一次,运行多次main函数,每次输出的a和&a都是相同的,a为2。难道全局变量的初始化赋值是在每次运行可执行文件之前都会重新赋值,而不是编译阶段吗?求大佬解释

#include "stdio.h"
int a=1;
int main()
{
a++;
printf("%d\n",a);
printf("%x\n",&a);
return 0;
}

...全文

相关推荐

C语言中.h和.c文件解析(20210920191036).pdf

C语言中.h和.c文件解析(20210920191036).pdf

Lidx0710

C语言中.h和.c文件解析.pdf

C语言中.h和.c文件解析.pdf

资料大全

C语言程序设计_第二阶段练习参考答案.doc

C语言程序设计_第二阶段练习参考答案.doc

黑色的迷迭香

单片机定时器赋初值的方法解析

在学习单片机的时候,我们发现很多功能都是通过中断来实现的。之前也举过烧水的例子来阐述中断,今天就讲解一下定时器赋初值的方法。8位的定时器最大可计数2的8次方为256,16位的定时器最大可计数2的16次方为65536。由于单片机的定时器是递加式的,所以最大值减去所要定时的值就是初值,举例如下: 最大值为100,我们只需要38,怎么办呢,由于是递加的,我们只需要在62时开始计时就可以了。以proteus仿真为例简单讲解定时器赋初值单片机定时器赋初值的方法解析用proteus搭建的电路图如下,晶振为12M,P2.0每10ms翻转一次,即P2.0输出的频率为100HZ。这里使用16位的定时器,那单片机定时器0的最大计数就是65536.晶振为12M,那单片机的一个机器周期就是1us,定时器 0工作在方式1时最大定时65.536ms。定时器的定时时间T = (65536-X),单位是us;定时器初值X = 65536-T;假设定时时间T=10ms=10000us,那定时器初值X=65536-10000=55536us,也就是定时器0从55536开始递加到65536就是10ms,所以55536

weixin_38506798

java在hashmap初始化时赋初值过程解析

主要介绍了java在hashmap初始化时赋初值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

weixin_38736562
评论 5
收藏 已收藏
分享
返回顶部
qq_38061756
C语言 70,039 成员 243,237 内容