获取传递给 C 函数的变量名

2023-12-09

我正在编写一个演示程序来打印变量的地址。为了使代码看起来更清晰,我创建了一个头文件,其中声明了该函数(例如pointer.h)和一个用于调用该函数的C文件(例如main.c)。我想打印 main.c 中调用的变量名的变量的地址

main.c:

#include "pointer.h"

int main(int argc, char *argv[]){
    int var=40;
    printAddress(var);
}

指针.h

#include<stdio.h>
int *p;
#define getName(var) #var

void printAddress(int a){
    p=&a;
    printf("Address of variable %s is %p\n",getName(a),p);
}

我尝试使用宏但它打印Address of variable a is 0x7fff2424407c这不是预期的输出Address of variable var is 0x7fff2424407c。谁能告诉我应该做什么改变并请解释一下。


您无法使用像您所示的函数来打印变量的地址。原因是a是局部变量,它与它的变量具有不同的标识value你传递到printAddress.

您也无法获取该名称,因为该名称在该上下文中不存在。

但是,您可以使用宏:

#define printAddress(x)    printf("Address of variable %s is %p\n", #x, &x)

注意#这是预处理器的字符串化运算符;它将标记转换为 C 字符串文字(实际上只是在标记周围添加引号)。

完整示例:

#include <stdio.h>

#define printAddress(x)    printf("Address of variable %s is %p\n", #x, &x)

int main(void)
{
    int foo;
    printAddress(foo);
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取传递给 C 函数的变量名 的相关文章

随机推荐

  • Python 3 安装失败“注册的密钥集无效”

    我一直在尝试安装Python 3 但出现此错误 我在 Windows 8 64 位上运行它 我会继续努力 谢谢您的帮助 我没有找到任何有关此事的文章 所以我来到这里 我对所有应用程序都遇到了这个问题 这意味着当我尝试安装应用程序时 会弹出相
  • Coldfusion如何将pdf文件保存在数据库中并在浏览器中获取它

    插入到 MS SQL 2008 数据库
  • V8 执行解释器生成的字节代码还是涡轮风扇编译器生成的二进制代码? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我对 v8 的工作原理以及它如何执行 js 代码感到困惑 据我了解 v8 首先解析代码并创建 AST 然后将此 AST 引入解释器作为输入并生成字节代码 然后将此字节代码引入到
  • 如何连接 Jenkins 和 Gieta

    我有一个问题 我想在 Gitea Repo 和 Jenkins 之间建立 CI CD 管道 到目前为止 我使用 Jenkins 的 Gitea API 创建了一个 Webhook 不幸的是 当我尝试将测试包从 Gitea 发送到 Jenki
  • 按时区转换日期

    在上面的代码中 我想将服务器时区 GMT 02 00 的日期转换为我设备中的时区 GMT 03 00 但我总是有相同的服务器日期 我做错了什么 TimeZone timeZoneServer TimeZone getTimeZone tim
  • 在循环中保存 Matplotlib 绘图时出现内存溢出

    我正在使用 Matplotlib 使用迭代循环来绘制 soame 数据 当代码保存了大约 768 个绘图时 它会抛出以下异常 RuntimeError Could not allocate memory for image 我的电脑有大约
  • 对声明的 C++ 静态成员变量的“未定义引用”[重复]

    这个问题在这里已经有答案了 我已经开始使用 Java 进行编程 我刚刚达到了我认为在语言知识方面 良好 的水平 为了好玩 我决定开始使用 C 编程 我对这种语言相当陌生 但我学得很快 而且我认为它与 Java 相差不远 我创建了一个测试类
  • 控制台宽度存储在 Windows 注册表中的哪个位置?

    我的默认控制台宽度是 80 但是当我查看HKCU Console没有一个名称具有此值 唯一与 with 有关的是 WindowSize但它的值为 0x190050 即 dec 1638480 它的最后两位数字是否代表我正在搜索的值 在 HK
  • Python:同名函数和变量

    为什么我无法再次调用该函数 或者说 我怎样才能做到呢 假设我有这个功能 def a x y z if x return y else return z 我这样称呼它 print a 3 gt 2 4 5 I get 4 但想象一下我声明了一
  • 没有点击就触发onclick事件

    这是一个简单的骰子投掷事件 6 个骰子 由随机数生成 一切正常 我正在控制台中获取数据 但我希望它仅在单击按钮时触发 在此代码中 在没有我点击的情况下触发了 onclick 事件 在控制台中 我该如何解决这个问题 h1 Dice Proje
  • 犰狳线性系统求解器(带 openblas)

    我一直在测试各种开源代码来求解 C 中的线性方程组 到目前为止 我发现最快的是犰狳 也使用 OPENblas 包 为了解决密集线性 NxN 系统 其中 N 5000 在我的系统上大约需要 8 3 秒 这真的非常快 没有安装 openblas
  • 辅助功能 - Android Talkback 不会在 HTML 内容上触发焦点事件

    我正在尝试执行 接收onfocus在 Android 设备 Moto G Android 4 4 3 上选择 HTML 页面时使用 Talkback 的 HTML 事件input field 我在单个输入文本上创建了onfocusevent
  • 如何在 Visual Studio Code 中搜索文件?

    我习惯使用 Resharper 我可以在其中搜索文件 不是内容 而是文件名 这使得打开新文件变得更快 此功能是否在 Visual Studio Code 中实现 是否有快捷方式 Using 转到文件 这是在Go菜单或使用键盘快捷键 On W
  • JQuery:隐藏孩子,显示第n个孩子?

    这真的很奇怪而且应该很简单 我在 div 的标签内有一组图像 例如 div a href img src img1 jpg a a href img src img2 jpg a a href img src img3 jpg a div
  • PHP Duck 示例 - 首先 - 设计模式 - 第一章

    这是我向许多其他人提出的第一个问题 这里有人可能会说我疯了 因为我正在使用 PHP OO 关注问题标题中提到的书 在第一章中 作者介绍了一个名为 SimUDuck 的简单项目 尽管我已经用 Java 重现了相同的项目 但我想使用 PHP 重
  • 根据 R 中单行中的多个所需值匹配/查找行

    这肯定是重复的 但我找不到它 所以就这样吧 我有一个包含两列的数据框 一个包含一个组 另一个包含一个标准 一组可以包含许多不同的条件 但每行只能包含一个条件 我想识别包含三个特定条件的组 但会出现在不同的行上 在 我的例子中 我想识别包含条
  • 在 SwiftUI 中控制嵌套 UIView 的惯用方法是什么

    我想在 SwiftUI 视图层次结构中显示 WKWebView 并且我想使用 SwiftUI 中实现的按钮来控制 WKWebView 我可以通过创建 SwiftUI 来做到这一点WebView实现的类UIViewRepresentable和
  • Javascript注入到webview中

    我知道存在很多关于此的问题 但我不明白为什么我的以下代码不再起作用 这是我的代码 private void init webview setWebViewClient new FormWebViewClient webview postUr
  • 异步 I/O Linux

    需要异步 I O 处理 计划在 Linux 上通过 aio 调用使用异步 I O 情况 我已经使用 AF INET 和 SOCK STREAM 标志 TCP 打开了套接字 发送缓冲区有限制高水位线 想要异步写入该套接字 并且当发送缓冲区溢出
  • 获取传递给 C 函数的变量名

    我正在编写一个演示程序来打印变量的地址 为了使代码看起来更清晰 我创建了一个头文件 其中声明了该函数 例如pointer h 和一个用于调用该函数的C文件 例如main c 我想打印 main c 中调用的变量名的变量的地址 main c