{
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 則是要調用者自行分配內存