我试图打印指针在C中保存的地址。我会使用%d或%p作为格式说明符吗?所有指针地址都是整数?在这个YouTube视频中,我认为是这种情况,但是当我尝试编写某些内容时,除非我使用%p,否则无法编译。另外,isn< i_ptr + 1应该是i_ptr保持+ 4的内存地址,因为int是4个字节? https://www.youtube.com/watch?v=JTttg85xsbo
三江源!!!!
#include <stdio.h>
void test(int *i_ptr);
int main() {
int i[5];
test(i);
return 0;
}
void test(int *i_ptr) {
printf("%d\n", i_ptr);
printf("%d\n", i_ptr + 1);
}
〜
答案 0 :(得分:1)
如果您的编译器支持C99,则可以使用类型uintptr_t
来保存指针的值。但是,由于编译器未指定其大小,并且此类型没有printf
说明符,因此您必须尝试使用"%d"
,"%ld"
和{{1}使事情有效。我想强调 它不是可移植代码 。
以下代码对我有用,在带有"%lld"
的64位Linux计算机上使用gcc 4.8.2。
-std=c99
使用样本运行的以下输出。
#include <stdio.h>
#include <stdint.h>
void test(int *i_ptr);
int main() {
int i[5];
test(i);
return 0;
}
void test(int *i_ptr) {
uintptr_t p = (uintptr_t)i_ptr;
printf("%ld\n", p);
p = (uintptr_t)(i_ptr+1);
printf("%ld\n", p);
}
<强>更新强>
格式说明符140735074589984
140735074589988
旨在用于"%td"
。它也更有可能适用于ptrdiff_t
。