C中地址分配的查询

Query on Address allocation in 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;
}

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

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

谢谢