我想知道为什么这段代码没有按预期工作。堆栈是否连续增长?
typedef char uint8;
int main(int argc, const char * argv[]) {
// insert code here...
uint8 number_1 = 3;
uint8 number_2 = 1;
uint8 *PointerToNumber = &number_1;
printf("%d \n", *PointerToNumber);
++PointerToNumber;
printf("%d \n", *PointerToNumber);
return 0;
}
该程序打印3和-112。但是,如果堆栈不断增长,它不应该打印3和1吗?
因此,如果我指向number_1,然后增加类型为uint8的指针地址不应该指向number_2,因为它是在number_2之后声明的?
这不是堆栈增长的问题,而是编译器如何选择排列局部变量的问题。 –
两个变量之间可能有未使用的字节......并且不能保证变量被放置在任何特定的位置或顺序中,或者甚至被包括在内(根据它们的使用方式,它们可以被优化)。 – Dmitri
不能依赖于局部变量在内存中的位置,但'number_2'可能位于'number_1'后面的下一个较低地址处。 –