2

可能重复:
C 中的 char s[] 和 char *s 有什么区别?
char a[]=“string”的区别;字符 *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);

提前致谢!:)

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

这里的人提供的两本好书:

char s[] 和 char *s 有什么区别?

char a[]="string"; 之间的区别 字符 *p="字符串";

4

3 回答 3

6

您的问题“我在哪里可以学习 char* 和 char[] 的所有基础知识”可能过于笼统,但您可以尝试阅读 C++ 规范。

通过将示例 1 更改为来修复示例 1

char const *test = "hello world";

通过将示例 2 更改为来修复示例 2

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

或者,如果您真的想要一个指向 c 字符串的非拥有指针向量:

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

你可以在你最喜欢的关于 C 的书中学到很多关于char*/的知识char[](不是关于 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

所以要记住的是指向值的指针和值本身之间的区别。

值本身是变量表示存储在内存中的文字值。指针是存储某些值的内存地址。

指针很有用,因为它们允许您访问、更改和保存跨多个函数/方法的信息更改,当您意识到只能从任何函数返回一个值时,这会派上用场,但有时您需要比这更多的信息.

数组的问题在于,虽然很多人在第一次学习 C++ 时并没有意识到这一点,但它们是指针。A[0] 不是变量,它是指向内存地址的指针。数组很方便,因为在声明数组时,您会分割出为该数组保留的一部分内存。这很有用,因为它允许您非常快速地访问存储在该内存块中的值。

所以实际上,声明指针 (char*) 和数组 (char[]) 之间并没有太大区别,只是指针将引用内存中的单个位置,而数组将引用内存中的一组连续位置。

要了解有关指针以及如何正确使用它们的更多信息,请访问http://www.cplusplus.com/doc/tutorial/pointers/

于 2012-05-15T21:08:56.183 回答