我正在學習C++。在據我所知這裏所示,該節目,str1
和str2
店的每一個相關的字符串的第一個字符地址:爲什麼我會在一種情況下得到一個帶有字符串文字的棄用轉換警告,而不是另一種情況?
#include <iostream>
using namespace std;
int main()
{
char str1[]="hello";
char *str2="world";
cout<<str1<<endl;
cout<<str2<<endl;
}
然而,str1
不給任何警告,而與str2
我得到這個警告:
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]
char *str2="world";
這兩個聲明有什麼區別,導致在第二種情況下警告,但不是第一種?
「str1和str2應存儲字符串的第一個字符的地址」。這不是真的。 'str1'存儲整個字符串本身的副本。它不存儲任何「地址」。另一方面,'str2'確實存儲地址。 – AnT
HI ANT,如果副本存儲在str1中,那麼將存儲另一個「hello」副本?如果我們修改str1複製str str [0] ='H',這個改變會影響另一個副本嗎? – Bahubali
最初的''hello''存儲在靜態和不可修改的內存中。當你執行'str [0] ='H''時,你修改存儲在'str1'中的副本。原稿保持不變。 – AnT