问题标签 [variable-address]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何使用带有变量名称的字符串获取变量地址?
我想做一个简单快速的通用控制台调试器。这个小库应该嵌入到主程序中。
所以我想在控制台模式下运行程序时做这样的事情:
“输入:打印 i” “输出:15.53” “输入:设置颜色 255” “输入:打印颜色” “输出:255”
“i”和“color”都是代码中预先声明的变量。它不是解释器,只是检查和修改变量内容的便捷方式。
GDB 不是我的问题的有效解决方案,因为我将将此代码用于我将编码的计算机图形程序,因此它需要能够在“发布模式”下运行。
到目前为止,我发现的一个非常简单的解决方案是创建一个包含 void 指针、指针数据类型和表示变量名的字符串的结构列表。但它不会像我想象的那样自动。
有没有办法转换一个字符串,比如说“颜色”,以获得 C++ 中名为颜色的整数变量的地址?如果没有,我该如何解决这个问题?
c - 局部变量的地址分配给结构中的成员指针
将局部变量分配给成员结构指针。最后使它为空。而不是给出空指针,而是在尝试访问它时给出 0。
c++ - 在 C/C++ 中取消引用 char 指针?
我正在使用 DWARF 和 ELF 信息的程序工作。我使用名为 Pin 的工具迷上了另一个程序。我有来自“Y”程序中声明的全局变量的地址,并将其连接到我将称为“X”的 Pin 模块中。
我得到了这些全局变量的一堆地址。不幸的是,当我尝试取消引用它们时遇到了麻烦。例如(现在我正在手动做事情,看看它是否在做应该做的事情):
我应该得到存储在那个地址中的变量,它是char *
一个单词。在这种情况下我是否必须取消引用两个指针?地址,然后char *
存储在该地址中?
当我想取消引用一个变量时,这工作得很好int
,但是每当我尝试取消引用一个 char 指针或变量时,我都会得到non-ASCII
值......
c - 如果我知道变量的地址,那么变量类型的字节大小的目的是什么?
通过知道变量的地址,我并没有得到处理变量字节大小的全部目的。例如,假设我知道 int 变量存储在哪里,假设它存储在 address 中0x8C729A09
,如果我想获取存储在该地址中的 int ,我可以取消引用该地址并获取存储在其上的数字。
那么,知道变量字节大小的目的究竟是什么?为什么变量是否具有4 bytes
(存在int
)或者8 bytes
我是否能够通过取消引用来获取变量的值address
?我问这个,因为我正在取消引用某个地址,我认为我需要通过一个 for 循环来获取变量(通过知道起始地址,即变量的地址,以及变量的大小以字节为单位),但每当我这样做时,我只会得到其他也被声明的变量。
一点上下文:我正在开发一个名为 Pin 的工具,并获取在另一个程序中声明的全局变量的地址。
for 案例看起来像这样:
c - 为什么Windows使用堆栈来存储局部变量?
为什么 C 使用堆栈来存储局部变量?这只是为了拥有独立的内存空间还是具有一旦超出范围自动清除所有局部变量和对象的功能?
我还有几个相同的问题,
问题1)如何从指令部分引用局部变量。考虑NewThreadFunc
的是由 createThread 函数调用的函数。
这个线程的堆栈看起来像这样,
现在我的问题是,在执行这个函数时,CPU 怎么知道局部变量(l_iSumLocalVar
和l_iLocalVar1
)的地址l_iLocalVar2
?这些变量不是它们存储必须从中获取值的地址的指针。我的问题是上面的堆栈。
问题 2)如果此函数进一步调用任何其他函数,堆栈将如何处理它?据我所知,堆栈会进一步分裂。如果这是真的,被调用函数的局部变量如何从被调用函数中隐藏起来。基本上局部变量如何维护范围规则?
我知道这些可能是非常基本的问题,但有些我怎么想不出答案。
c++ - 使用指针在 C++ 中显示 char 变量的地址?
我们如何显示 char 变量的地址?我找到了一个使用类型转换的解决方案,首先将其转换为 int 或 float 或 void 等,然后使用指针显示地址。但是在没有类型转换的情况下,有没有其他特定解决方案的替代方案?使用类似的指针
但在这种情况下,即使指针指向 var 的地址,但会显示 var 的值。为什么?如果是这样,那么我们如何使用指针获取 var 的地址?不使用类型转换
或者我们必须为特定问题重载任何运算符?
c++ - 为什么我无法在 MSVS2019 / C++ 中获取 char 或 uint8_t 变量的内存地址?
我需要获取程序中某些变量的内存地址。获取 short、int、uint32_t 等类型的 2 或 4 字节变量的地址没有问题。但是,当我尝试获取 1 字节变量的地址时,我在控制台上得到一个乱码,而不是数字地址。
这是我正在使用的代码:
控制台输出:
在调试模式下使用内置的“内存视图”,我可以看到 1 字节变量,它们应该具有以下地址: b: 0075fdfb z: 0075fde3
有人可以指出我做错了什么吗?
c - 在示例中,为什么 `char _Alignas(double)` 的大小不是 8?
在我的环境中运行,结果是:
由 gcc 版本 8.1.0 编译(x86_64-posix-seh-rev0,由 MinGW-W64 项目构建)。
我想知道为什么和之间的字节数&c2
是&c1
7,而不是 8(sizeof(double)
在我的环境中)?
c - 我是否使用 C 中的指针变量将值直接分配给内存位置?
我决定通过学习 C 来使我的生活复杂化。目前我正在尝试完全理解指针。
到目前为止,这是我的理解:
但是后来我正在考虑将一个字符串重新分配给一个变量,并遇到了这篇文章,其中一个指针变量被直接赋值。
这就是我想要理解的:
此外,如果我为 分配一个新的字符串值ptr
,例如ptr = "String 2";
,并在每次分配后输出内存位置,我会得到一个不同的内存位置:
我真的为指针变量引用的内存位置分配了一个值吗?
为什么当我为指针变量分配新值时内存位置会发生变化?