在两个函数中声明变量,但仅初始化其中一个

YW

变量a在两个单独的函数中声明,但仅在其中一个中初始化。主函数调用声明并初始化a的函数,然后调用第二个函数,该变量在不初始化的情况下重新声明该变量。即使在不同的函数范围内初始化a,它也会打印42,该函数的数据在函数完成后应该已经销毁。为什么会这样呢?

#include <stdio.h>
void foo() {
    int a = 42;
}
void bar() {
    int a;
    printf("%d",a);
}
main() {
    foo();
    bar();
}
小龙舌龙

噢,那是一个好人。正式地,它是不确定的。但是我敢打赌,他们中的许多人会打印42,因为a可能会在堆栈上使用相同的内存地址。

因此,如何工作的基础就是调用一个函数时应将程序返回到的PC(程序计数器)的值与参数一起推入堆栈。在这种情况下,foo和bar都没有参数,因此只有一个指针将被压入堆栈(也就是说,从相对地址0开始总共有4个字节)。

然后,当功能开始时,其变量将被压入堆栈。在这种情况下,它们两个都有一个将被压入的a,每个将再次压入4个字节(总共8个字节,从相对地址4开始)。

这是C / C ++中从其他函数/程序中获取数据的常用方法,否则不应允许该函数访问。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

在Swift中重新初始化一个懒惰的初始化变量

来自分类Dev

在另一个函数/构造函数中初始化后,使变量为只读[C ++]

来自分类Dev

jQuery通过两个变量过滤,其中一个可能未定义

来自分类Dev

在一个函数中返回两个变量

来自分类Dev

在固定容器中的两个单行流体div,其中一个扩展

来自分类Dev

当其中一个函数具有带有约束的通用参数时,无法声明两个具有相同名称的函数

来自分类Dev

同一域中的两个不同的PHP会话,如何仅销毁其中一个?

来自分类Dev

在该类的声明中声明一个类的实例并就地对其进行初始化

来自分类Dev

为什么我不能按顺序在一个文件中初始化两个静态类变量,而不能初始化三个?

来自分类Dev

我需要在PHP构造函数中初始化之前声明一个变量吗

来自分类Dev

dplyr在一个函数中联接两个表,其中一个变量名是该函数的参数

来自分类Dev

最后初始化变量在两个构造

来自分类Dev

从Solidity中的另一个函数访问在一个函数中初始化的变量值

来自分类Dev

如何在构造函数的成员初始化器列表中调用两个函数?

来自分类Dev

搜索一对中的两个元素并替换其中一个元素

来自分类Dev

如何在两个单独的变量上联接两个表,其中一个变量具有相同的名称

来自分类Dev

在一个函数中返回两个变量

来自分类Dev

Scala从一个特性中初始化两个对象?

来自分类Dev

如何使两个单选按钮成为必需,但仅应接受其中一个

来自分类Dev

在for循环中一次初始化两个变量

来自分类Dev

同一域中的两个不同的PHP会话,如何仅销毁其中一个?

来自分类Dev

声明一个var而不初始化它...

来自分类Dev

dplyr在一个函数中联接两个表,其中一个变量名是该函数的参数

来自分类Dev

如何使用两个j变量来重塑数据,其中一个是字符串?

来自分类Dev

jQuery:通过仅单击其中一个来切换两个单选按钮

来自分类Dev

如何压缩两个列表,其中一个列表仅包含一项

来自分类Dev

为什么这个函数在初始化两个对象时只返回一个?

来自分类Dev

同一个函数中的静态函数变量初始化顺序

来自分类Dev

一个 venv 中的两个 pip 版本-如何删除其中一个

Related 相关文章

  1. 1

    在Swift中重新初始化一个懒惰的初始化变量

  2. 2

    在另一个函数/构造函数中初始化后,使变量为只读[C ++]

  3. 3

    jQuery通过两个变量过滤,其中一个可能未定义

  4. 4

    在一个函数中返回两个变量

  5. 5

    在固定容器中的两个单行流体div,其中一个扩展

  6. 6

    当其中一个函数具有带有约束的通用参数时,无法声明两个具有相同名称的函数

  7. 7

    同一域中的两个不同的PHP会话,如何仅销毁其中一个?

  8. 8

    在该类的声明中声明一个类的实例并就地对其进行初始化

  9. 9

    为什么我不能按顺序在一个文件中初始化两个静态类变量,而不能初始化三个?

  10. 10

    我需要在PHP构造函数中初始化之前声明一个变量吗

  11. 11

    dplyr在一个函数中联接两个表,其中一个变量名是该函数的参数

  12. 12

    最后初始化变量在两个构造

  13. 13

    从Solidity中的另一个函数访问在一个函数中初始化的变量值

  14. 14

    如何在构造函数的成员初始化器列表中调用两个函数?

  15. 15

    搜索一对中的两个元素并替换其中一个元素

  16. 16

    如何在两个单独的变量上联接两个表,其中一个变量具有相同的名称

  17. 17

    在一个函数中返回两个变量

  18. 18

    Scala从一个特性中初始化两个对象?

  19. 19

    如何使两个单选按钮成为必需,但仅应接受其中一个

  20. 20

    在for循环中一次初始化两个变量

  21. 21

    同一域中的两个不同的PHP会话,如何仅销毁其中一个?

  22. 22

    声明一个var而不初始化它...

  23. 23

    dplyr在一个函数中联接两个表,其中一个变量名是该函数的参数

  24. 24

    如何使用两个j变量来重塑数据,其中一个是字符串?

  25. 25

    jQuery:通过仅单击其中一个来切换两个单选按钮

  26. 26

    如何压缩两个列表,其中一个列表仅包含一项

  27. 27

    为什么这个函数在初始化两个对象时只返回一个?

  28. 28

    同一个函数中的静态函数变量初始化顺序

  29. 29

    一个 venv 中的两个 pip 版本-如何删除其中一个

热门标签

归档