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

questions regarding char* and char[] basics

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between char s[] and char *s in C?
Difference between char a[]=“string”; char *p=“string”;

首先,我想问一下在哪里可以学习char*和char[]的所有基础知识。

大多数时候,我发现自己在如何比较和如何申报方面遇到了困难。

例1:

1
   char *test ="hello world";

这将在编译时产生以下警告:

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

例2:

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

这将导致复制字符串时出错。

所以我想到的解决方案是:

(这是正确的吗?)

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

事先谢谢!:)

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

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

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

char a之间的差异[]="string";char*p="string";


你的问题"我在哪里可以学习char *和char"的基本知识,也许太笼统了,但是你可以试着阅读C++规范。

通过将示例1改为

1
char const *test ="hello world";

通过将示例2更改为

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

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

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


在C上你最喜欢的一本书中,你可以学到很多关于EDCOX1 0 /EDCX1 1的内容(而不是C++),因为C++提供了比C更好的表示字符串的工具。

声明/转让

1
char *test ="hello world";

应该是

1
const char *test ="hello world";

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

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

这是可行的,因为字符串文本可以隐式转换为std::string


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

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

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

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

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

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