char,char [],char *之间的区别

时间:2014-07-23 11:03:50

标签: c++

我尝试使用空值设置简单的char但没有成功。主要目标是比较std :: string单个字符和预定义字符

std::string str ="fcvfr";
char c = '' //trying to set empty char here ....  but it gives me error
if(c == str[0]) 
{
   //do something 
}

这让我想到何时应该使用以下每种类型的问题:

char * , char , char[] 

1 个答案:

答案 0 :(得分:4)

char表示一个字符(在堆栈上分配)。如果要将其设置为空,请使用char c = '\0'char c = (char) 0

char* cPtr是指向角色的指针。您可以使用char* c = new char('\0')在堆上分配一个空字符。

char c[n]是一个大小为n的字符数组。


修改

正如人们在下面正确指出的那样,char永远不会是空的,就像std::vectorstd::string这样的容器可能是空的一样。 charint没有根本的区别,它只是更短(1个字节而不是2个或4个或8个)。 int可以为空吗?不是这样;它可以为零,这意味着它的所有位在内存中都设置为零,而char也是如此。 char c = '\0'将表示为" 00000000"在堆栈上。

另一方面,指向char(char* cPtr)的指针可以是空的'通过将其设置为NULL,它可以指向任何地方。在这种情况下,指针本身将存在于堆栈中,并包含一个特殊的0/1序列,系统将其解释为NULL。执行cPtr = new char('\0')后,将在堆上分配char(即一个字节)并设置为" 00000000",并在堆栈上设置cPtr的值将被更改为指向堆上新字符的地址。

PS:实际上不char* cPtr = new char('\0'),使用std::vector<char>std::string。此外,您可能需要查看smart pointers