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"); |
这是可行的,因为字符串文本可以隐式转换为
所以要记住的是指向值的指针和值本身之间的区别。
值本身是一个变量在内存中表示的文字值。指针是内存中存储某个值的地址。
指针非常有用,因为它们允许您访问、更改和保存跨多个函数/方法的信息更改,当您意识到只能从任何函数返回一个值时,这非常有用,但有时您需要更多的信息。
关于数组的事情是,尽管很多人在第一次学习C++时都没有意识到这一点,但它们是指针。[0]不是变量,它是指向内存地址的指针。数组很方便,因为在声明数组时,您需要分割为该数组保留的内存部分。这很有用,因为它允许您非常快地访问存储在该内存块中的值。
因此,实际上,声明指针(char*)和数组(char[])之间没有太大的区别,除了指针将引用内存中的单个位置,而数组将引用内存中的一组连续位置之外。
要了解更多关于指针以及如何正确使用它们的信息,请访问http://www.cplusplus.com/doc/tutorial/pointers/。