C语言内存分配,到底是按哪种顺序呢

最近自学C语言,为大学课程做准备,刚到指针这里。

#include <stdio.h>
int main()
{
    int i=8;
    printf("%p\n",&i);
    int p=0;
    printf("%p\n",&p);
    return 0;
}

在我的计算机上输出

img

和网课上演示的结果也是一致的

网课中的解释大概是 这两个局部变量,分配在内存中一种叫堆栈的地方。在堆栈中分配内存是自顶向下的
但是我的一个同学却用相似的代码得到了相反的结果

img


所以请问一下为什么我们会得到不同的结果呢?还有网课的那个解释我也不太明白,能请各位通俗地给我讲一下吗,谢谢。

供参考:https://blog.csdn.net/Ye_Ming_OUC/article/details/123441066

在c语言中,系统分配了四个区,堆区,栈区,数据区,代码区,不同的区存放不同的数据,你定义的局部变量就存放在栈区,这个栈区是指计算机中空闲的存储空间,你用的时候会随机分配给你一个内存区,并不是完全一样的,所以你们的最终结果也不一样。你只需要知道他是随机分配的就好

关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:深入理解C语言数组与内存分配