2017-06-19 71 views
-4

我真的很困惑,因爲我個人,我來自java背景,最近開始C++。所以,我學會了所有基本的東西,比如把東西印到屏幕上,然後現在我學到了指針。因此,YouTube上的人(The Cherno's C++ Pointer tutorial這不是他聲明const char *的視頻,只是我遵循的指針教程。)我一直在使用以下語句來聲明我所知道的「字符串」 。const char *不只是一個字符?

const char* str = "random text here"; 

但是,如何將char *轉換爲字符串,甚至使用雙引號就像字符串!另外,常數與這些有什麼關係?如果我從我的代碼中刪除const,它會給我一個錯誤。但是,我明白指針是什麼。它是一個變量,用於保存另一個變量的內存地址,所以如果要直接訪問該變量,他們只需要執行*ptrVarName並對其進行解除引用。但字符串"like this one"如何成爲內存地址? 我不需要這樣做嗎?

char[] str = "string here"; 

然後執行:

char* stringPointer = *str; 

(警告:未經測試的代碼!)提前

感謝。 (噢,對不起,如果這是一個非常NOOBY問題或問題是製作粗糙的,我剛開始用C++和計算器)

編輯:好了,我明白了char* str的意思。這意味着當你參考*str時,這意味着你正在訪問內存中的第一個字符。好的,我現在明白了。但是,const是什麼意思?

+11

聽起來像你可以使用[良好的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。您可以從隨機在線教程中獲得更完整的教育。 – NathanOliver

+3

如果您使用C++,爲什麼不使用'std :: string'? – RPGillespie

+1

事實上,從'T *',我們不知道是否有一個或幾個對象。 – Jarod42

回答

0
const char* str = "random text here"; 

在右手側上,"random text here"定義文字串實際上是const char[17]類型的數組(包括空終止字符)。當您將該數組分配到const char* str時,它將decays指向指向第一個字符的指針。您無法通過指針修改字符串常量,因爲字面字符串存儲在只讀存儲器,所以下面將是非法的:str[0] = 'x';

char[] str = "string here"; 

這一次是不同的。它定義了char數組str,它的大小與右側字符串文字(const char[12])的大小相同。字符串文字將被複制到數組str中,因此您將能夠修改str。在這種情況下,編寫str[0] = 'x';將是合法的。

0

如果聲明爲const char *某物=「MyString的」 這將放置了mystring在礦井內存和某物指向它像數組,但可以直接訪問內存

+0

但你還沒有回答我的子問題「const是什麼意思?」 –

+0

由於petar velv說他們沒有區別他們 –

+0

但是,埃米爾(嘿,你有和我一樣的明顯的名字),當我使用char * str =「一些文本」; C++提供了一個錯誤 –

0

工作,這些都是普通的C字符串。一個C字符串總是空終止。換句話說,它最後有'\0'。所以你只需要在內存中的字符串開始的地方,你可以找到它結束的時間。

對於指針運算,這些[]括號只是語法糖。 str[]*str相同,str[1]*(str+1)相同,只是將指針遞增一個char(8位)並獲取第二個元素的地址。

+3

Ameer - 你真的需要得到一本好書並閱讀指針和指針算術。 '*(str + 1)'意思是「將'1 * sizeof(str)'加到指針'str'並且*然後*取消引用「 – RPGillespie

+0

是的,我明白了,當我在我的文本編輯器中嘗試過某些東西時,我意識到了,然後我明白了,無論如何,我破產了,沒有錢買書;( –

0

C實際上並沒有字符串。一個字符串是一個由nul(0)終止的字符數組。現在C中的數組和指針緊密相連,並且char *或const char *通常指向一個字符串,但只能以與其他指針通常指向數組相同的方式。單個char *可能只指向單個字符,您必須從上下文中知道,就像int *可能指向一個整數或整數數組一樣。

由於字符串很方便,因此字符串字面量有一個特殊的語法規則。在引號中的字符串文字變成了一個常量字符*(實際上它的類型是char *,用於向後兼容)。所以在這個意義上,C有字符串。但是,所發生的一切就是字符串正在佈局在程序的數據部分,然後是地址。

相關問題