关于char *和char []基础知识的问题

时间:2012-05-15 20:55:37

标签: c++ char

  

可能重复:
  What is the difference between char s[] and char *s in C?
  Difference between char a[]=“string”; char *p=“string”;

首先,我想问一下我在哪里可以学习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);

提前致谢! :)

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

这里的人提供了两个好的读物:

What is the difference between char s[] and char *s?

Difference between char a[]="string"; char *p="string";

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:3)

你可以在你最喜欢的C语言书中学到很多关于char* / char[]的知识(不是在C ++上,因为C ++提供了比C更好的表示字符串的工具)。

声明/作业

char *test = "hello world";

应该是

const char *test = "hello world";

因为字符串文字是指向常量的指针。如果你想在C ++中使用vector个字符串,你可以这样做:

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

这很有效,因为字符串文字可以隐式转换为std::string

答案 2 :(得分:-1)

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

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

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

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

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

要详细了解指针以及如何正确使用指针,请访问http://www.cplusplus.com/doc/tutorial/pointers/