首页 > 解决方案 > 如果较小的类型值替换较大的变量,会发生什么?

问题描述

#include <stdio.h>

void main()
{
    int s = (char)1;
    int *p = &s;
    printf("%x", *p);
}

output
1

我试图找出是否声明了 int 类型变量并替换了 char 类型值 1,其余 3 个字节的变量 s 是否已初始化。对于这个输出,我可以认为 24​​ 位变量 s 中的每一个都被初始化为 0 吗?

标签: c

解决方案


发生什么事?

较小的类型会隐式转换较大的类型,因此您的显式类型转换不会有效地执行任何操作(除了可能会截断较大的值)。

在功能上,这两行是相同的:

int x = (char) 1;
int y = (int)(char) 1;

这两行也是相同的:

int x = (char) 257; // Truncated to 1
int y = 1;

推荐阅读