2

重複の可能性:
C の char s[] と char *s の違いは何ですか?
char a[]="string"; の違い char *p="文字列";

まず、char* と char[] のすべての基本をどこで学べるかお聞きしたいと思います。

ほとんどの場合、比較方法と宣言方法に苦労しています。

例 1 :

   char *test = "hello world";

これにより、コンパイル時に次の警告が生成されます。

 warning: deprecated conversion from string constant to ‘char*’

例 2 :

   vector<char*> test2;
   test2.push_back("hello world");

これにより、文字列のコピーでエラーが発生します。

だから私が思いついた解決策は次のとおりです。

(これは正しいです?)

   vector<char*> test3;
   char *str1 = "hello world"
   test3.push_back(str1);

前もって感謝します!:)

============================================

ここの人々によって提供された2つの良い読み物:

char s[] と char *s の違いは何ですか?

char a[]="string"; の違い char *p="文字列";

4

3 に答える 3

6

「char* と char[] のすべての基本をどこで学べますか」という質問は、おそらく一般的すぎるかもしれませんが、C++ 仕様を読んでみてください。

例 1 を次のように変更して修正します。

char const *test = "hello world";

例 2 を次のように変更して修正します。

vector<std::string> test2;
test2.push_back("hello world");

または、c-string への非所有ポインターのベクトルが本当に必要な場合は、次のようにします。

vector<char const *> test2;
test2.push_back("hello world");
于 2012-05-15T21:00:36.003 に答える
3

char*/についてchar[]は、お気に入りの C の本で多くのことを学ぶことができます (C++ ではなく、C++ では文字列を表現する機能が C よりもはるかに優れているためです)。

宣言/割り当て

char *test = "hello world";

する必要があります

const char *test = "hello world";

文字列リテラルは定数へのポインターであるためです。vectorC++ で文字列が必要な場合は、次のようにします。

std::vector<std::string> test2;
test2.push_back("hello world");

文字列リテラルは暗黙的に に変換できるため、これは機能しstd::stringます。

于 2012-05-15T21:01:10.063 に答える
-1

So the thing to remember is the difference between a pointer to a value and the value itself.

The value itself is the literal value that a variable represents as stored in memory. A pointer is the address in memory that some value is stored at.

Pointers are useful because they allow you to access, change, and preserve changes in information across multiple functions / methods, which comes in handy when you realize you can only return one value from any function, but sometimes you want a lot more information than that.

The thing about arrays is that, while a lot of people don't realize this when first learning C++, they are pointers. A[0] isn't a variable, it's a pointer to a memory address. Arrays are handy because when declaring an array, you segment off a portion of memory reserved for use for that array. This is useful because it allows you to access the values stored in that block of memory very very quickly.

So really, there's not that much difference between declaring a pointer (char*) and an array (char[]) other than that the pointer will refer to a single location in memory while the array will refer to set of contiguous locations in memory.

To learn more about pointers and how to use them properly, visit http://www.cplusplus.com/doc/tutorial/pointers/ .

于 2012-05-15T21:08:56.183 に答える