微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C语言地址分配查询

如何解决C语言地址分配查询

你能帮我理解这个基本项目吗:

我有两个变量 i 和 J ,我的查询是我已经初始化了“I”,然后是“J”,但是第一个地址分配给了 J 而不是“I”。

你能帮我理解为什么吗?

I 和比 J 高 4 位的地址

#include<stdio.h>
int main()
{
    int i;
    printf("%d",sizeof(int));
    printf("enter the number to multiply wuth 1 through 10:");
    scanf("%d",&i);
    printf("size of I:%d\n",sizeof(i));
    for(int j=0;j<=10;j++){
    
        printf("%d\n",i*j);
        printf("Address of j:%d\n",&j);
    }
    printf("%d",&i);
    return 0;
}

解决方法

编译器使用自己的算法来决定如何在变量之间分配内存,基于许多因素,例如对齐和缓存线使用情况。不能保证它们会按照与它们的声明相同的顺序排列在内存中,也没有任何特别的理由期望这种情况。 (而且除非你取变量的地址,否则它可能会被优化成一个完全不占用内存的寄存器。)

,

它完全依赖于编译器。由于所有这些变量都存储在堆栈中,我们无法决定将哪个地址提供给哪个变量。 尝试多次运行相同的代码,您可能会发现 i 的地址分配在 j 之前。

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。