可能重复:
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);
提前致谢! :)
============================================
这里的人提供了两个好的读物:
答案 0 :(得分:6)
您的问题“我在哪里可以学习char *和char []的所有基础知识”,可能过于笼统,但您可以尝试阅读C ++规范。
通过将示例1更改为
来修复示例1char const *test = "hello world";
通过将示例2更改为
来修复示例2vector<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/。