C语言 打印地址

2024-12-21 13:30:03
推荐回答(4个)
回答1:

我汗!
首先,地址不是4位8进制数。地址是16进制数。具体多少位,是内存位宽而定。
其次,用%x可以打印出来,结果是地址,这个不需争论,但是这个地址不是严格按照地址格式走的。地址格式是确定位数的,例如0012FF7C。而用%x打印出来的是12ff7c。用%#x打印出来0x12ff7c。
么有其他区别。

回答2:

所有的变量在内存中都自己的存储空间,该空间的编号就是内存地址,可以通过&运算符来获得变量地址,通过printf("%p")函数进行输出,%p表示按内存地址格式输出(16进制)如:
#include
void main()
{
char c ;
char ac[10]="hello";
struct t {
int a, b;
double d;
} st ;
printf("c's address = %p\n", &c ); //输出一个字符类型变量的地址
printf("ac's address = %p\n", &ac );
printf("ac's address = %p\n", ac ); //数组名本身就是一个地址,若按%p输出,就会得到其地址
printf("ac's address = %s\n", ac ); //按%s输出,就会输出地址中的字符串数据hello
printf("st's address = %p\n", &st ); //输出一个结构体类型变量的地址
}

回答3:

%p是把变量作为指针
POINTER
输出
输出为地址
%x是把变量作为十六进制数输出
%#x会比上面的输出多一个0X前缀
也就是如果%x输出为
00000FF
%#x输出为
0X00000FF

回答4:

printf("%p\n", &i);
printf("0x%x\n", &i);