c - 在 C 中分配给静态变量的内存
问题描述
int a, b, c = 0;
void prtFun(void);
int main()
{
static int a = 1; /* line 1 */
prtFun();
a += 1;
prtFun();
printf("\n %d %d ", a, b);
}
void prtFun(void)
{
static int a = 2; /* line 2 */
int b = 1;
a += ++b;
printf(" \n %d %d ", a, b);
}
上述程序的输出是:
4,2
6,2
2,0
局部变量一般存放在函数的栈中,全局变量和静态变量存放在进程的数据段中对吧?在那种情况下,在多个函数中具有相同的静态变量名称会导致任何冲突吗?数据段中如何引用变量?
解决方案
首先,当您提出问题时,请正确格式化您的代码
int a, b, c = 0;
void prtFun (void);
int main(void)
{
static int a = 1; /* line 1 */
prtFun();
a += 1;
prtFun();
printf ( "\n %d %d " , a, b) ;
}
void prtFun (void)
{
static int a = 2; /* line 2 */
int b = 1;
a += ++b;
printf (" \n %d %d " , a, b);
}
prtFun
b
是一个自动变量,每次调用此函数时都会对其进行初始化。
a
是静态局部变量,它只初始化一次,并在函数调用之间保持其值。但它的范围是函数的本地prtFun
因此,当您第一次调用它时,它a
被分配 4 并被b
分配 2。您打印此值
在函数中,main
另一个a
静态局部变量被赋值为 2(初始化 + 增量)。
当您prtFun
再次调用时,您将 2 添加到函数自己的a
变量中,该变量保留上一次调用 (4) 的值,结果为 6。b
再次初始化为 1 并预递增 - 所以它是 2。
然后在函数 main 中打印它自己的a
变量(即 2)和全局变量b
,即 0
推荐阅读
- input - Armory3d blender Haxe 代码键盘输入(单引号)
- python - 我希望输出数组在同一行
- html - 在单选按钮组旁边放置按钮
- python - 'OrderedDict' 并且 CSV 文件中没有换行符
- ios - Objective-C 程序化标题未显示
- javascript - 为什么即使对象引用值更改并且应该执行break语句,while循环仍会继续循环?
- python - 为什么 python 在该程序的最后一行输出中给出 None ?
- javascript - 浏览器加载服务器上损坏的 CSS 版本,而不是原始 CSS
- amazon-web-services - Terraform KMS 访问被拒绝?
- javascript - 知道浏览器中是否启用了平滑滚动?