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 之前。

谢谢