对于C语言比较新,我学到地址取决于操作系统和CPU等因素。我在一门C课程的实验中被要求运行一个程序,并打印每个变量的地址,问我们这些地址和变量值是否与另一个同学(完全相同的程序)的相同。它们是本地变量,存储在堆栈上。通常我会说不可能,但是我们所有人都需要通过ssh连接到我们大学的实验室,我们的程序在相同规格的机器上运行。这就让我感到困惑了,我很确定这些值将是相同的,但我不知道确切是什么决定了这些地址。这是程序的一部分代码:
int g2(int a, int b)
{
int c = g1(a + 3, b - 11);
printf("g2: %d %d %d \n", a,b,c);
printf("a's address is %p b's address is %p C's address is %p\n", &a, &b, &c);
return c - b;
}
对我来说,a的地址是0x7ffe9bce4a0c。我并不是在寻找作业答案,而是问这里,因为我的队友们没有发送他们的地址,我们被允许这样做。我已经进行了调查,但找不到与这种情况相匹配的答案,非常感谢您的帮助,谢谢!
main()
之前可能会使用更多或更少的堆栈空间 -- 这可能取决于版本或其他因素。 - Lou Franco"%p"
打印时,请将地址转换为void*
,例如:printf("a的地址是 %p\n", (void*)&a);
。 - pmg