Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将变量地址放入C中的另一个变量中_C_Variables - Fatal编程技术网

将变量地址放入C中的另一个变量中

将变量地址放入C中的另一个变量中,c,variables,C,Variables,我想知道我是否可以捕获一个变量地址,我可以使用 fprintf(stdout, "%p\n", (void*) &var); 并将其放入另一个变量中,而不显示它 (输入字符串变量,而不是实际地址) 我已经用setbuf测试过了,但是它仍然显示了我不想要的字符串 我试着到处找,但我看到的只是使用setbuf或其他不适合我所要找的方法。您可以使用以下方法: void* pointerToVar = &var; fprintf(stdout, "%p\n", pointerToV

我想知道我是否可以捕获一个变量地址,我可以使用

fprintf(stdout, "%p\n", (void*) &var); 
并将其放入另一个变量中,而不显示它

(输入字符串变量,而不是实际地址)

我已经用setbuf测试过了,但是它仍然显示了我不想要的字符串


我试着到处找,但我看到的只是使用setbuf或其他不适合我所要找的方法。

您可以使用以下方法:

void* pointerToVar = &var;

fprintf(stdout, "%p\n", pointerToVar); 

您可以使用与捕获字符串中任何输出相同的方式捕获地址的字符串表示形式-使用函数:

char buf[17];
sprintf(buf, "%p", (void*) &var);
此时,
buf
包含一个以null结尾的字符串,表示适合打印的
var
地址


当然,如果希望将字符串保持在
buf
范围之外,则需要动态分配另一个字符串,并
strcpy
buf
放入其中。

指针实际上只是一个整数(地址)。您可以这样做:

float var;
int addr_of_var = (int)(&var);

根据平台的不同,它可能是long int,我想。

我尝试了第一篇文章,它也起了作用

我们还尝试了这个的一个修改版本,它也是这样工作的

字符a=5;//随机数,字面上并不重要

unsigned long long int b = (unsigned long long int) &a;

int num = abs(b);

那么您想将指针的地址作为字符串放入
char*
?您是否尝试过sprintf(mystr、%p、(void*)&var)?这里的
mystr
将是一个指向字符数组的指针。在大多数64位系统上都不起作用。对任何指针使用
intptr\u t
uintptr\u t
而不是
int
或只是
void*
。“指针实际上只是一个整数”这对于某些实现可能是正确的,但肯定不是所有实现。例如,您可能想在这里阅读:(我们使用此…;-)的时间不长)是的,但可能减去\n。abs()需要一个int参数,而不是无符号的long int参数。使用建议的代码会导致编译器发出警告。而且该值已经是无符号的,那么为什么还要用abs()呢?