char *str1 = "hello";
char str2[] = "hello";
if (str1 == "hello")
printf("ok1\n");
if (str2 == "hello")
printf("ok2\n");
if (strcmp(str1, "hello"))
printf("ok3\n");
if (strcmp(str2, "hello"))
printf("ok4\n");
一道基礎題,知道 ==比較地址,strcmp比較內容。
請各位大神指教為何輸出的是 ok1 謝謝!
"hello"是字符串常量,編譯器會進行優化:
由於所有的"hello"都是相同的,整個程序中只需要有一個"hello"字符串。然後所有引用"hello"這個字符串的**指針變量**都賦值成相同的地址。
所以:
char *str1 = "hello";
和"hello"
的地址是相同的。
對於:char str2[] = "hello";
,這裡str2
並不是指針,類型裡已經說明它是一個數組,所以這會是另一個內存地址,於是str2
與"hello"
的地址是不同的。
strcmp
的部分你應該清楚,我就不解釋了。