2012-05-24 34 views
1
char str[]="Hello"; 

這個分配的字符串6個字節,但如果我寫用於指向字符串的char指針是否覆蓋內存?

char *str = "Hello"; 

將這個覆蓋數據,因爲它只是爲了保存1個字符?所以我問的是,當我聲明一個字符串,但不是初始化它(char str [12];),12字節保留在這裏或當我初始化它?如果他們在這裏得到初始化,這樣就意味着在:

char *str; 

只有1個字節被保留,但是當我使其指向一個字符串,不在於覆蓋數據超越它的界限?

+0

可能重複[char a \ [\] =「string」之間的區別是什麼?和char * p =「string」;](http://stackoverflow.com/questions/9460260/what-is-the-difference-between-char-a-string-and-char-p-string) –

+0

與你以前的問題,char * str =「Hello」;表達式中的轉換仍然不正確(編譯器會警告你) –

回答

2
char *str; 

不保留任何內容的數據。它是一個指針,大小可以容納一個內存地址。爲{ 'H', 'e', 'l', 'l', 'o', 0 }

char *str = "Hello"; 

6個字節已經已經由編譯器保存在某個地方。現在你正在製作一個變量來保存它的地址(指向它)。字符串內容不會被複制。

0
char str[]="Hello"; 

你說對了,它的6 char小號

char *str = "Hello"; 

數組這是一個指向字符串常量。某處有一列6 char s,而您的變量str正指向它。

char *str; 

這不保留任何東西,它的指針指向一個不確定的地方。當你把它指向一個字符串時,它指向一個其他地方的char的數組,它不涉及拷貝。

+0

除非優化器消除了本地指針變量,否則空間將被保留,足夠的空間來容納一個內存地址