问一个malloc的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 10:20:32
请看下面的程序:
int *p;
p=(int *)malloc(sizeof(2));
cout<<sizeof(*p)<<endl;

为什么结果是4,而不是2?
再有,
#include "stdio.h"
int main()
{
int *p=(int *)malloc(sizeof(char));
p[1]=3000;
p[0]=5000;
printf("%d ",p[1] );
}
如果p指向的内存空间*p只有8位的话,为什么p[0]不会覆盖掉p[1]呢?3000>2^7啊。。

数值太大,会造成溢出,不会覆盖。比如说一个的数,化成二进制为10,而你定义的类型,只能放8位的,则只存放后面的那八位。前面那两位舍去。所以数值就变了,这就是溢出。