C++ 为什么printf()显示的地址输出与C+;中的cout不同+;指针? #包括 #包括 #包括 使用名称空间std; int main(){ int x=25; int y=35; int*p0=&x; int*p1=&y; cout

C++ 为什么printf()显示的地址输出与C+;中的cout不同+;指针? #包括 #包括 #包括 使用名称空间std; int main(){ int x=25; int y=35; int*p0=&x; int*p1=&y; cout,c++,pointers,printf,cout,C++,Pointers,Printf,Cout,是一样的,0x只是一个用来表示它是十六进制数的前缀。是一样的,0x只是一个用来表示它是十六进制数的前缀。因为您使用%x作为格式说明符,这意味着十六进制格式(没有0x)对于unsigned int。在您的计算机中,它是相同的数字,但在对象指针通常有8个字节的64位计算机中,您可能会使用不同的数字 指针的正确格式说明符是%p,它以实现定义的方式打印指针,通常前缀为0x,请尝试以下操作: #include <iostream> #include <cstdio> #includ

是一样的,0x只是一个用来表示它是十六进制数的前缀。

是一样的,0x只是一个用来表示它是十六进制数的前缀。

因为您使用
%x
作为格式说明符,这意味着十六进制格式(没有
0x
)对于
unsigned int
。在您的计算机中,它是相同的数字,但在对象指针通常有8个字节的64位计算机中,您可能会使用不同的数字

指针的正确格式说明符是
%p
,它以实现定义的方式打印指针,通常前缀为
0x
,请尝试以下操作:

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

int main(){

    int x = 25;
    int y = 35;

    int *p0 = &x; 
    int *p1 = &y;

    cout << p0 << endl; 

    printf("%x",p0); 

    cin.get();
    return 0;
}
printf(“%p\n”,静态_-cast(p0));

请注意,
%p
需要一个
void*
指针,因此需要强制转换。

因为您使用
%x
作为格式说明符,这意味着十六进制格式(不带
0x
)对于
unsigned int
。在您的计算机中,它是相同的数字,但在对象指针通常有8个字节的64位计算机中,您可能会使用不同的数字

指针的正确格式说明符是
%p
,它以实现定义的方式打印指针,通常前缀为
0x
,请尝试以下操作:

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

int main(){

    int x = 25;
    int y = 35;

    int *p0 = &x; 
    int *p1 = &y;

    cout << p0 << endl; 

    printf("%x",p0); 

    cin.get();
    return 0;
}
printf(“%p\n”,静态_-cast(p0));

请注意,
%p
需要一个
void*
指针,因此需要强制转换。

使用
%p
而不是
%x
。正如余浩的回答所说,打印指针值的正确格式是
%p
%p
的输出格式是实现定义的;它通常是十六进制的(带或不带前导的
0x
),但这不能保证。使用
%p
而不是
%x
。正如余浩的回答所说,打印指针值的正确格式是
%p
%p
的输出格式由实现定义;通常是十六进制的(带或不带前导的
0x
),但这不能保证。