#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
void t()
{
int k;
int m;
char a[1];//3
char *c=new char[4];//4
printf("%X\n%X\n%X\n%X\n",&k,&m,&a,&c);
}
int main()
{
t();
printf("%d\n",sizeof(char*));
return 0;
}
a此时只占一个字节,而系统对齐方式是4字节,而c new的内存分配在堆上,c变量被分配在栈上,于是就出现了c的地址与a的地址间的差是7.由于一个指针占4字节,而前面还有需补齐的3字节,于是差值变为7.