我正在编写一个演示程序来打印变量的地址。为了使代码看起来更清晰,我创建了一个头文件,其中声明了该函数(例如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(使用前将#替换为@)