2012-11-04 48 views
1

我似乎更像是C++中的noob,而不是我原先認爲的。就我對C/C++的瞭解而言,這應該起作用。我定義了一個字符數組,然後嘗試將一個指針分配給開始......我做錯了什麼?C++錯誤:無法在初始化中將'char(*)[63]'轉換爲'char *'

// Create character array 
char str[] = "t xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0 0 1234.567890"; 
// Assign pointer to beginning of array 
char* p = &str; 
+0

數組是指針... – alk

回答

9

str的類型是char[63]。作爲參考,請注意,字符串文字本身的類型是const char[63],而不是const char *。你把這個地址,給你一個指向char[63]char (*)[63]的指針。然後嘗試將其分配給char *

你應該做的是用不了的地址,讓陣列衰變成一個指針:

char *p = str; 

你應該真的這麼做了,雖然是使用std::string

+0

好建議。 –

+0

你的回答是明確的,但你能幫我理解一點嗎?你是說我的char數組變成常量嗎? –

+2

@EricFossum,它需要文字,它是一個常數字符數組,**將它們複製到一個非常量字符數組中(這是可以的,因爲它們被複制),然後將它們用於指針。我覺得有必要明確地說,文字不是指針,它是一個數組,因爲很多人不知道這些(正如我從10k +代表中看到的那樣,當幾個月的問題被問到時,人們給出了錯誤的答案)前)。 – chris

4

您可以簡單地忽略地址操作,

char *p = str; 

作品,陣列自動衰變成指針在這方面的第一個元素。或者,如果你願意,明確施放,但那將是一種可憎的行爲。

0
char* p = str; 

&符號是多餘的。一個普通的數組名稱只是表示它的開始地址。

相關問題