发布网友
共3个回答
热心网友
首先,第一个问题,int* p是一个指向int类型数据的指针,int占4个字节(特殊情况下也可以占2个字节,在此不考虑),而malloc (1)向系统申请1个字节的内存空间并返回其首地址,强行转换成int类型指针,赋值给p。所以望里面存整数的时候,会有3个字节无家可归喽...至于“住进邻居家”,假如我现在malloc (1)申请的首地址是:0x00000001 ,但是被你强转成(int*)之后,也占4个字节,也就是0x00000001 ~ 0x00000004,嘿嘿,而恰好,原本0x00000002 ~ 0x00000005 也是一个整型数据,当你想向p赋值的时候,悲剧产生了0x00000002,0x00000003,0x00000004被当成p所指向的地盘。。。而原来那个整型的值就改变了,至于“括号内的值为什么有的时候还是0呢”这个嘛是malloc的函数一种保护机制,当参数为0的时候,并非分配0个字节的内存空间(认真你就输了),而是进入保护机制,在此机制下可以当作分配了最多6~7M左右的内存空间。作为一个程序员,代码是必须的:
typedef union _uint
{
int i; // 4个字节整型变量
char by4[4]; // 字节数组,元素为4
}U_INT;
U_INT ui;
这是一个共用体,i和by4[4]占用相同的内存空间
给ui.i赋一个整型值,你再去打印一下ui.by4[0] - ui.by4[3]的值
然后再给ui.by4[0] - ui.by4[3]赋上值,再打印 ui.i 的值
相信你就能明白了
热心网友
这个就是动态分配一段地址,
原型:extern void *malloc(unsigned int num_bytes);
用法:#include <malloc.h>
或#include<stdlib.h>
功能:分配长度为num_bytes字节的内存块
说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
当内存不再使用时,应使用free()函数将内存块释放。
malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)表示指针.
热心网友
int型是四个字节,而你分配的指针指向一个字节的内存,放不下,所以会有3个字节无家可归。