unsigned char *teta = ....;
...
printf("data at %p\n", teta); // prints 0xXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
如何使用iostreams 打印变量地址?有吗std::??? 功能就像std::hex做这种转换(地址 - >字符串),那么std::cout << std::??? << teta << std::endl会打印那个地址吗?
(没有sprintf的,请;))
我现在已经阅读了至少十几篇关于%p的文章,我仍然没有得到明确的答案.我意识到网站上有多个帖子,我读了很多帖子.我甚至读过这篇文章,但它没有充分解释
说我有:
int x = 10;
void *p = &x;
Run Code Online (Sandbox Code Playgroud)
下面的语句是否打印出'p'的地址或'x'的地址?
printf( "Here: %p\n" , p );
Run Code Online (Sandbox Code Playgroud)
我试图获得x到p的地址.
对于某些上下文,我正在迭代堆栈,寻找指向我创建的链表的指针:
void foo(){
register void* base asm("ebp");
void* iter = base;
void* mBase = MAIN_BASE; //global defined as "register void* base asm("ebp")" in main function
void* start = &head;
void* fin = &tail + sizeof( tail );
while( iter != mBase ){
if( iter >= start && iter <= fin )
fprintf( stdout, ">>>>%p\n", iter );
printf("iter: %p\n", iter );
iter …Run Code Online (Sandbox Code Playgroud) 这是我使用的程序:
int hex = 0x23456789;
char * val = &hex;
printf("%p\n",hex);
printf("%p %p %p %p\n",*val,*(val+1),*(val+2),*(val+3));
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
0x23456789
0xffffff89 0x67 0x45 0x23
Run Code Online (Sandbox Code Playgroud)
我正在使用64位操作系统的64位CPU.这表明我的机器是小端.为什么第一个字节是0xffffff89?为什么ff的?
例如:
int* x = new int;
int y = reinterpret_cast<int>(x);
Run Code Online (Sandbox Code Playgroud)
y现在保存变量的内存地址的整数值x.变量y大小int.该int大小是否总是足够大,以存储转换为任何类型的转换后的内存地址int?
编辑:
或者使用更安全,long int以避免可能的数据丢失?
编辑2:对不起的人,为了使这个问题更容易理解,我想在这里找到的是返回的HEX值的大小作为数字,不是int的大小,也不是指向int的指针的大小,而是普通的十六进制值.我需要用人类可读的符号来获得这个价值.这就是我reinterpret_cast用来将内存HEX值转换为DEC值的原因.但是要安全地存储值,我还需要找出它的变量:int,long - 什么类型足够大?
#include <stdio.h>
int main(void)
{
int *ptr;
printf("The Hex value of ptr is 0x%x",ptr);
printf("The pointer value of ptr is %p",ptr);
}
Run Code Online (Sandbox Code Playgroud)
和输出有些不同,我不知道为什么
The Hex value of ptr is 0x24a77950
The pointer value of ptr is 0x7fff24a77950
Run Code Online (Sandbox Code Playgroud)
它显示ptr的值是一个十六进制整数,但是十六进制输出缺少part 7fff。
这是printf格式问题还是其他?
有人可以解释第二行的输出吗?
int x=10;
printf("%d\n",x);
printf("%p\n",x);
printf("%p\n",&x);
Run Code Online (Sandbox Code Playgroud)
输出:
10
0000000a
006aff0c
Run Code Online (Sandbox Code Playgroud)