{
char in;
puts("hello world\n");
printf("%d%d\n",sizeof(int),sizeof(char*));
int intarray[5];
intarray[3]=1049215;
intarray[4]=1;
printf("%d\n",intarray[3]);
printf("%c#%1i#%1i#%1i#%1i?%2i?%2i\n",*((char*)(&intarray[3])),*((char*)(&intarray[3])),*((char*)(&intarray[3])+1),*((char*)(&intarray[3])+2),*((char*)(&intarray[3])+3),((short*)((char*)(&intarray[3])+1))[0],((short*)((char*)(&intarray[3])+1))[1]);
gets(&in);
return 0;
}
一个数组,int类型,长度为5.
&intarray[3] 取地址 -> 第四个元素的起始地址, int为4个字节
(char*)(&intarray[3]) 强制类型转换为char char长度为1
(char*)(&intarray[3])+1 偏移1个
内存状态
intarray[0] : byte[0]/byte[1]/byte[2]/byte[3] 均为0 .
intarray[1] : byte[0]/byte[1]/byte[2]/byte[3] 均为0 .、
intarray[2] : byte[0]/byte[1]/byte[2]/byte[3] 均为0 .
intarray[3]=2(20) + 2(9) +127 = 1049215
intarray[3] : byte[0]=127/byte[1]=2/byte[2=16]/byte[3] =0.
intarray[4]=1
intarray[4] : byte[0]=1/byte[1]=0/byte[2]=0/byte[3]=0
&intarray[3] 取地址 -> 第四个元素的起始地址, int为4个字节, 此时指针指向byte(0)
(char*)(&intarray[3]) 强制类型转换为char char长度为1 此时指针指向byte(0)
(char*)(&intarray[3])+1 偏移1个 此时指针指向byte(1)
((short*)((char*)(&intarray[3])+1))[0] 强制类型转换为short short长度为2 此时指针指向byte(1)byte(2) = 4098 =2+ 2(12)
((short*)((char*)(&intarray[3])+1))[1] 强制类型转换为short short长度为2 此时指针指向byte(3)以及intarray[4]的byte(0) = 256 = 0 + 2(8)
strdup 和strcpy
strdup会自动分配内存其实是malloc 和strcpy的集合。
但是在某些C++库中,strdup使用new来分配内存,所以如果在使用strdup中,会产生困惑,究竟是用free/还是delete来释放strdup中申请的内存,如果free来释放new的内存,则会产生不可理解的错误
strcpy 则是要调用者自行分配内存