我有一个关于使用long int和myChar的问题。我观察到,递增的存储器地址(例如,通过手动指针算术)因数据类型而异。 例如,递增char指针会将内存地址加1,而递增int指针会将double值加4、8,长双精度数加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 );
可以很好地进行编译和执行,但是XCode在进行类型转换时给了我警告:“从指针投射到不同大小的整数。”
经过一番谷歌搜索和binging(后者是一个词吗?)之后,我看到有人建议使用long int:
#include
...
printf( "pChar: %ld\n", ( intptr_t )pChar );
printf( "pFloat: %ld\n", ( intptr_t )pFloat );
确实解决了错误。 因此,我认为从现在开始,我应该使用long int进行类型转换指针...但是,在经过一番烦躁之后,我发现可以通过用myFloat替换myChar来解决问题:
printf( "pChar: %ld\n", ( long int )pChar );
printf( "pFloat: %ld\n", ( long int )pFloat );
所以我的问题是,为什么long int有用,什么时候应该使用? 在这种情况下,似乎是多余的。 显然,myChar和myFloat的内存地址太大而无法容纳在int中...因此将其类型转换为long ints可以解决此问题。
有时对于long int来说,内存地址也太大了吗? 现在,我考虑了一下,我想如果您有> 4GB的RAM,这是可能的,在这种情况下,内存地址可能会超过2 ^ 32-1(无符号长整数的最大值...),但是C在此之前就创建了 可以想象的吧? 还是他们有先见之明?
谢谢!