小試了一把BZLinux虛擬機!:)

今天上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

這驗證了我的疑惑,呵呵,找回點信心...!:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章