C中的记忆分配

时间:2015-09-07 17:01:32

标签: c pointers allocation

 #include <stdio.h>

 main(){
 int *px;
 int i =1;
 float f = 0.3;
 double d = 0.0005;
 char c = '*';

 px = &i;
 printf("Values: i=%i f=%f d=%f c=%c \n\n", i ,f, d,c);
 printf("Addresses: &i=%X &f=%X &d=%X &c=%X\n\n", &i, &f, &d, &c);
 printf("Pointer values: px=%X px+1=%X px+2=%X px+3=%X\n\n",px,px+1,px+2,px+3);

 }

变量是分配的内存地址,如下所示

Values:i=1 f=0.300000 d=0.00500 c=*

Addresses: &i=FFF4 &f=FFF0 &d=FFE8 &c=FFE7

Pointer values: px=FFF4 px+1=FFF6 px+2=FFF8 px+3=FFFA

为什么首先将内存分配给char变量?

1 个答案:

答案 0 :(得分:2)

局部变量在堆栈上分配,堆栈朝着更小的值增长。因此,最高地址首先分配,最后一个最后分配,因此最后一个本地变量的地址最低,以最明显的顺序分配地址。

然而,这并不一定是保证行为,因为编译器可以以任何它认为最佳的方式自由地为堆栈上的局部变量安排存储。