C中的内存分配

Memory allotment in C

 #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变量?

局部变量分配在栈上,栈向较小的值增长。因此,首先分配最高地址,最后分配最低地址,因此最后一个局部变量在最明显的分配地址顺序中具有最低地址。

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