我应该使用哪种格式说明符来打印变量的地址?下面很多我很困惑.
%u - 无符号整数
%x - 十六进制值
%p - 无效指针
哪个是打印地址的最佳格式?
我有一个关于使用intptr_tvs. 的问题long int.我观察到递增内存地址(例如通过手动指针算术)因数据类型而异.例如,递增char指针会将1添加到内存地址,而递增int指针会为double添加4,8,为long double添加16等等...
起初我做了这样的事情:
char myChar, *pChar;
float myFloat, *pFloat;
pChar = &myChar;
pFloat = &myFloat;
printf( "pChar: %d\n", ( int )pChar );
printf( "pFloat: %d\n", ( int )pFloat );
pChar++;
pFloat++;
printf( "and then after incrementing,:\n\n" );
printf( "pChar: %d\n", (int)pChar );
printf( "pFloat: %d\n", (int)pFloat );
Run Code Online (Sandbox Code Playgroud)
编译和执行得很好,但XCode给了我警告我的类型转换:"从指针转换为不同大小的整数."
经过一些谷歌搜索和binging(后者还是一个词?),我看到有些人推荐使用intptr_t:
#include <stdint.h>
Run Code Online (Sandbox Code Playgroud)
...
printf( "pChar: %ld\n", ( intptr_t )pChar );
printf( "pFloat: %ld\n", ( intptr_t )pFloat );
Run Code Online (Sandbox Code Playgroud)
这确实解决了错误.所以,我想,从现在开始,我应该使用intptr_t类型转换指针...但是经过一些烦躁之后,我发现我可以通过替换int为long …
什么是字符串格式intptr_t, uintptr_t 哪个对32位和64位架构都有效.
编辑
warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type "AAA"
Run Code Online (Sandbox Code Playgroud)
这是我在64位但不是32位的警告.
intptr_t AAA
Run Code Online (Sandbox Code Playgroud)