c语言int类型的值存储在ram中吗,内存管理-为什么/何时在C语言中使用`intptr_t`进行类型转换?...

我有一个关于使用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在此之前就创建了 可以想象的吧? 还是他们有先见之明?

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值