需要注意以下几点:
栈是从高地址向低地址方向增长;
在C语言中,函数参数的入栈顺序是从右到左,因此UpdateCounter函数的3个参数入栈顺序是a1、c、b;
C语言中形参和实参之间是值传递,UpdateCounter函数里的参数a[1]、c、b与静态区的a[1]、c、b不是同一个;
"char *b = NULL"定义一个指针变量b,b的地址是0xFFF8,值为空-->运行到"b = (char*)malloc(1024*sizeof(char))"时才在堆中申请了一块内存(假设这块内存地址为0x77a0080)给了b,此时b的地址并没有变化,但其值变为了0x77a0080,这个值指向了一个堆空间的地址(栈变量的值指向了堆空间),这个过程b的内存变化如下:
|