坑--数据类型不同发生踩内存

解析64位机器下函数调用的实参转换问题
本文深入探讨了一个在64位机器上进行函数调用时,实参从int类型转换为longlong类型的细节。解释了在函数内部如何通过解引用操作符获取int值,并且在长整型变量中实际获取到的是int值的高位部分,导致的结果计算方式。通过直观的图表展示了不同数据类型的位数分配,帮助理解这一过程。

先看一段有问题的代码并试着算出结果:

void foo(int i, long long *ll) {
    printf("%ld\n", *ll);
}

int main() {
    int i = 0;
    int n = 1;
    foo(n, &i);

    return 0;
}

Q.请问在64位机器上结果是多少?

A.1 * 2^32

W.在64位机器上long long 占64 bit。函数调用的实参是int型 只占32 bit。解引用行参会取到64 bit,这时发生不够,就会向邻居非法借1 bit。所以结果是1 * 2 ^ 32。

|----------------------------64 bit ------------------------------|
|----------------------------long long----------------------------|
|-------------32 bit-------------|-------------32 bit-------------|
|-------------int----------------|-------------int----------------|
|-------------------------------1|00000000000000000000000000000000|

转载于:https://my.oschina.net/guonaihong/blog/290693

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值