2012-05-15 80 views
2

可能重复:
What is the difference between char s[] and char *s in C?
Difference between char a[]=“string”; char *p=“string”;关于char *与的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";

+2

你试过'std :: vector '吗? –

+2

仅供参考,警告是因为''hello world''是一个'const char []',并且你将它存储到一个非const'char *'中。 – chris

+0

我知道弦乐作品。但作为im从文件中提取数据。我需要比较它与char *因此我认为它可能会更容易,如果我声明它为char * – mister

回答

6

你的问题: “我在哪里可以学习的char *与char []所有的基本知识,” 可能是太一般了,但您可以尝试阅读C++规范。

修复实例1通过将其更改为

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

或者,如果将其更改为

char const *test = "hello world"; 

修复例如2你真的想不拥有指向C字符串数组:

vector<char const *> test2; 
test2.push_back("hello world"); 
+0

糟糕,你打败了我...我[我超过了删除限制](http://meta.stackexchange.com/q/98746/175984)的一天,所以我只是upvote你的。 – dasblinkenlight

3

您可以在自己喜欢的位置了解更多关于char*/char[]关于C的书(不在C++上,因为C++提供了比C更好的表示字符串的工具)。

声明/分配

char *test = "hello world"; 

应该

const char *test = "hello world"; 

,因为字面字符串是指向常量。如果你想字符串vector在C++中,你做这样的:

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

这工作,因为字符串文字可以被隐式转换为std::string

+0

即使是C++书籍也足以让人感受到它们。即使您使用C++,知道这一点也很重要。 – chris

+0

@chris你是对的,知道'char *'对C++程序员很重要。但对于C程序员来说,知识是至关重要的:) – dasblinkenlight

+0

所以说的确如此。 – chris

-1

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

该值本身是一个变量代表的内存中存储的字面值。 指针是存储某个值的内存中的地址。

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

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

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

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

+0

关于数组的问题是,虽然很多人都相信这一点,但数组并不是指针。推荐阅读:http://stackoverflow.com/q/1641957/46642和http://stackoverflow.com/q/4810664/46642 –

+0

从我的链接到cplusplus.com: “事实上,数组的标识符是相当于它的第一个元素的地址,因为指针等同于它指向的第一个元素的地址,所以实际上它们是相同的概念。“ 显然,数组和指针之间存在差异,但重点是它们都只是对内存位置的引用。 – MattS

+0

cplusplus。com被称为[运动几个错误](http://programmers.stackexchange.com/questions/88241/whats-wrong-with-cplusplus-com)。这只是其中之一。 –