C++ 个字符数据类型的用途是什么?为什么不直接使用字符串?

What's the purpose of the char data type in C++? Why not just use strings?

本文关键字:为什么不 字符串 字符 数据类型 C++ 是什么      更新时间:2023-10-16

我看不到使用为单个字符保留的单引号的意义。那么,什么时候使用的?即char a = 'a';来自JavaScript和PHP,我习惯于为整个字符串使用单个引号,但是在得知C 中的字符保留单个引号后,我很想知道为什么?您为什么需要一个字符?

php和javaScript是在相当高的水平上运行的语言。这意味着基本类型本质上只是几种不同类型,其实现隐藏在实际脚本引擎中的一组功能中。

c和c ,以及大多数其他低级语言都会暴露更多的"机器运作方式"。c中的字符串是字符的序列。如果您想处理字符串,则需要能够处理其组件,即char。当您想构建字符串,比较字符串的内容等时,一个字符就会有用。自然,对于C 中的正常字符串操作,您将使用std::string,然后像脚本语言一样,字符串的大多数方面实际上代表的人隐藏在std::string类实施中,因此您实际上不需要关心它。但是,如果您要"查看" std::string,它将迟早或更晚,成为char *,它是一个指向一个内存的指针,其中包含一系列字符,单个char元素。

人们可以看一下它从"准备好的大型乐高"到只有小块可以使用的。您仍然可以构建相同的东西,但是它需要更多的作品,并且需要更多的构建努力。您赢得的是灵活性和速度。对于处理器,char真的很容易处理,在该处理器中,PHP中的一个字符仍表示为字符串 - 恰好是一个元素。因此,在跟踪该字符串的位置,存储的位置,它的时间等等,因为语言中的功能并不能区分单个字符和巨质体的字符串。

C的目的,并且在很大程度上也是C ,是密切代表硬件。因此,您的基本类型更接近实际的硬件表示形式,这是您需要了解C和C 的更多信息。不幸的是,涵盖所有这些都将远远超出一个答案。您将需要为自己提供一本好的C和/或C 书。

要更快,更有效地运行事物,您必须学习如何使用更少的空间。当您拥有'a'时,这实际上是一个数字(请参阅ASCII表),但是当您获得"a"时,它是2个字符{'a',''}的数组。零是知道何时结束字符串,因为计算机不确定字符串何时结束。您是否要在JavaScript中添加一个长度属性,以直接知道字符串的长度?您使用更多可能不需要的空间。不知何故,您必须区分这两个值才能运行有效的代码。首先,学习C/C ,您实际上学习了如何在计算机的低级别上工作,并且比通过学习PHP/JavaScript/Ruby/Python的了解更多。C 比更高级别的编程语言更可定制。

javascript和php是脚本语言,而C (尤其是其前身C)是相当低的本地本地本地的编程语言,您必须考虑如何将变量存储在内存中。

char a = 'a';创建 8位长数字变量,该变量可以保存字符值(ASCII代码),并将字符a的值放入其中。因此char a = 97;也做相同的工作。

const char* s = "a";创建 null终止字符串是一个 array ,带有两个元素:字符 a的值和终止的 0字符(只有数字 0或字符 '')。*意味着我们创建一个指向数组的指针。它的类型是const char,因为它包含字符串文字是常数。我们可以使用const char s[2] = { 97, 0 };const char s[2] = { 'a', '' };

创建相同的数组


顺便说一句,单引号不是仅保留给单个字符的。您可以将一些字符放入单引号。查看在多个字符上使用时单引号在C 中会做什么?

语言C 从语言C继承的标量类型。因此,您应该获得有关C 或C的好书以获取详细信息。

类型char是数字类型。这是一个可以旧角色的整数。它通常是签名的,但可以用签名或未签名的前缀覆盖。另外,可以在编译器上配置签名。'A'字面定义了一个与字符A。

的代码相同的数字

" a"字符串是char的数组,并且终止为零。在示例中,您有两个字节'a',''。当您使用文字时,编译器将地址作为pointer传递给数组。该指针可以分配给指针变量

char *s = "A";

或传递到功能

foo("A");

此外,当您获得char数组的含义时,您都可以掌握所有指针算术。

edit 数字字面'a'和char数组" a"是const对象。很明显,您不能将任何内容分配给

之类的数字
'a' = 23; // wrong!

当您将文字分配到变量时,您可以更改以后变量。

但是,当您将指针存储在指针变量中时,它是非法的,当您尝试修改char数组时,您会得到未定义的行为:

char *s = "A";
*s = 'B';  // try to change the first byte of the char array, causes undefined behavior.

表达这是很好的样式,可以使用指针用于const char变量:

const char *s = "A";
*s = 'B'; // compiler diagnostic says: not allowed