今天上CSDN論壇,主要看看有沒有分撿:),在C/C++版裏看到一個網友發了一個這樣的帖子:“自認爲是高手的請進來一下,看似簡單其實不然的問題. ”
鏈接:http://topic.csdn.net/u/20080315/18/13b42704-bf6c-4959-99e5-b47d51988a14.html
內容:
char str1[]="hello";
char *str2 ="hello";
char *p1 = str1;
char *p2 = str2;
printf("%d,%d,%d,%d/n",sizeof(str1),sizeof(str2),sizeof(p1),sizeof(p1));
程序結果:6,5,4,4
請問以下爲什麼str1,str2採用數組str1[]和指針*str2以同樣的結果在在內存中存儲,爲什麼用sizeof計算出來的結果卻不相同?
ps: 如果str[5] sizeof(str)==5.
好久沒有寫代碼了,看了這個問題還真還有點蒙,但是我對第二個結果表示疑惑,不管怎麼樣用事實說話總不會錯吧!
於是copy了以上代碼寫了下列C程序:temp.c
void main()
{
char str1[]="hello";
char *str2 ="hello";
char *p1 = str1;
char *p2 = str2;
printf("%d,%d,%d,%d/n",sizeof(str1),sizeof(str2),sizeof(p1),sizeof(p1));
}
在XP下的Dos窗口裏開啓TC2.0,編譯執行,結果是:6,2,2,2
然後開啓BZLinux虛擬機,通過ftp下載temp.c源代碼到虛擬機硬盤,然後執行:
#gcc -o temp temp.c
#./temp
輸出結果是:6,4,4,4
這驗證了我的疑惑,呵呵,找回點信心...!:)