在Schaum的C++書籍中學習代碼,我看到很多使用char *,int *等的代碼。 做了練習,我還看到在解決方案中有char *,並且在我的代碼中我使用了char(沒有星)。在C++中char和char *有什麼區別?
我想知道一個char和一個指針char - integer和一個指針整數之間的區別是什麼?我應該在哪裏使用它們?他們的意思究竟是什麼?
在Schaum的C++書籍中學習代碼,我看到很多使用char *,int *等的代碼。 做了練習,我還看到在解決方案中有char *,並且在我的代碼中我使用了char(沒有星)。在C++中char和char *有什麼區別?
我想知道一個char和一個指針char - integer和一個指針整數之間的區別是什麼?我應該在哪裏使用它們?他們的意思究竟是什麼?
帶有*
的變量是指針。
「普通」變量(例如char或int)包含該數據類型本身的值 - 該變量可以包含一個字符或一個整數。
指針是一種特殊的變量;它不包含值本身,它包含內存中的值的地址。例如,char *
不直接包含字符,但它包含計算機內存中某個字符的地址。
您可以通過使用&
採取「正常」變量的地址:
char c = 'X';
char * ptr = &c; // ptr contains the address of variable c in memory
而你通過指針使用*
得到內存的值:
char k = *ptr; // get the value of the char that ptr is pointing to into k
見Pointer (computing)在維基百科。
對於char或int,變量值是實際分配的值 - 「a」或42.對於char *或int *,變量值是存儲實際分配值的位置。因此,*表示變量指向存儲器中可找到值的位置。
指針指向特定變量的內存地址。起初有些人可能很難理解指針,關於它的更多信息請參見wikipedia。
char *是一個指向內存中字符序列的指針,以'\ 0'結尾。一個字符代表一個字符。 int *將內存地址保存爲整數值。
實施例:
int* x = new int();
我們在堆上創建一個新的整數變量,並且在存儲器中的位置被保存在指針。指針現在指向整數所在的內存部分。如果我想使用的整數值的指針指向的話,我會叫:
int y = *x;
這解引用的內存地址;它獲得指針後面的值。 y的值將成爲指針指向的內存後面的數據類型的值。
我不得不買一本關於C語言的書,只是在指針上,但是一旦我理解了它們,C就變得易於編程了。 – 2009-09-26 19:24:46
您應該閱讀您書中解釋指針的第7章 - 您可能需要多個簡短的答案才能真正理解該主題。
當你有char或者int或者long或者類似的東西時,那麼內存將被留出來保存這個值,所以char是一個1字節的內存用於存儲。
該字節的地址是指針指向的地址。
當你有一個字符串或連續的char行時,這很有幫助,因爲你可以指向該字符串的開始,並將它傳遞給另一個函數,以便該函數可以使用字符串中的實際值。
所以,你用星號表示指針。
帶*的變量是指針。這意味着它們包含一個內存地址,而沒有*的變量包含值。
所以一個字符包含一個字符值如'a'或'Z'。 char *指向一個內存區域,您可以通過char訪問值char。
int變量包含一個整數值,如1或12345. int *指向可以通過int訪問int值的內存區域。
對於所有其他類型都是如此。
實施例:
// pointer declaration
char* pchar = new char[5];
此分配5 *的sizeof(char)的一個存儲器區和可以訪問5個字符。
當你的指針不再需要時,不要忘記釋放內存。
// pointer destruction
delete pchar;
您的示例沒有分配5個字符的數組。它分配一個字符值爲5. – erikkallen 2009-09-26 20:55:04
糟糕使用'()'而不是'[]'。感謝您將它指向我 – 2009-09-27 08:04:31
OK,
我會在這坐刺。 char
和char*
之間的區別是編譯器將變量放在您使用的內存中。
char c
是一個堆棧聲明。容器保存您放入其中的數據的值,並應用堆棧範圍規則。當你擊中方法體的末尾時,c
會「超出範圍」並自動清理。
char *c
是一個指針變量。這意味着,變量不會保存您放入其中的數據的值,而是存儲在內存中的地址,通常稱爲「內存地址」。然後我們說c
是「堆」,你,程序員負責清理它。所以當c
超出範圍時不會自動清理,您需要調用delete
來釋放內存。
*
,是一元運算符,也被稱爲deferencing operator
。
這裏是一個很好的維基Dereference_operator
指針不一定指向堆上的內存。有關指向堆棧內存的示例,請參閱Jesper的回答。 – Chuck 2009-09-26 20:33:28
char是一個值類型,因此引用該類型的變量得到一個字符。例如,
char ch = 'a';
cout << ch; // prints a
char *是一個指向字符的指針,通常用於迭代字符串。例如,
char* s = "hello";
cout << s; // prints hello
s++;
cout << s; // prints ello
應該阻止人們回答? – 2009-09-26 20:52:41
char *通常用於遍歷字符數組,即C字符串。與其他指針通常使用的方式不同,它很少用作指向單個字符的指針。 C++具有通常應該使用的更新的字符串結構。 – UncleO 2009-09-26 21:38:44