C中的字符常量和初始化

问题描述 投票:0回答:1

我正在读一本名为“ C Primer Plus”的书,学习C语言。目前,我正在阅读有关C数据类型(第3章)的问题。

在书中写道:>

字符常量和初始化

[...]在单引号之间包含的单个字符是C字符常量。 [...]因为字符实际上是作为数字存储的,所以您也可以使用数字代码来分配值。 [...]有点奇怪,C将字符常量视为int类型而不是char类型。例如,在具有32位int和8位char的ASCII系统上,代码

char grade = 'B';

将'B'表示为以32位为单位存储的数值66,但是等级以以8位为单位存储的66结束。

[我对这部分的理解是,声明语句char grade = 'B';将在两个位置存储其char变量和字符常量,一个以32位为单位存储为数值66,而在8处以66存储该变量grade。位单位。 (这有点令人困惑。)然后,书中接下来的两个句子是:

字符常量的这种特性使得可以定义一个字符常量,例如'FATE',并以32位为单位存储四个单独的8位ASCII码。但是,尝试将这样的字符常量分配给char变量将导致仅使用最后8位,因此该变量将获得值'E'。

我在这里理解的是,一个多字符常量是可能的,这与本书开始时给出的定义不同。但是,只有在上一部分中提到的两个位置之一才有可能。因为字符常量在C中是int类型,并且int在这里是32位,所以'FATE'有4个字符,每个8位。因此,4 * 8 =32。但是char变量只有8位空格,因此将仅存储最后一个字母。

并且,为了应用知识,我尝试了

/* test.c */
#include <stdio.h>
int main(void)
{
    char grade = 'FATE';
    printf("%d, %c", grade, grade);
    return 0;
}

这在编译时给了我一些警告。警告是多字符字符常量,并在隐式常量转换中溢出。

然后我尝试使用“ FAT”,“ FA”和“ F”。仅'F'有效。

最后,我的问题是:

  1. 我是否正确理解这本书?用字符常量初始化char变量是否需要两个位置来保存其值?
  2. 如果我是对的,为什么它将数值和char变量分开?调用时如何精确分离并连接在一起?为什么需要两个地方?
  3. 如果我是对的,我的test.c是否由于多字符字符常量而失败,因为我的笔记本电脑系统的int单元仅为8位字节?

我正在读一本名为“ C Primer Plus”的书,学习C语言。目前,我正在阅读有关C数据类型(第3章)的问题。在书中,字符常量和...

c char int constants
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.