c - 如果较小的类型值替换较大的变量,会发生什么?
问题描述
#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 吗?
解决方案
发生什么事?
较小的类型会隐式转换回较大的类型,因此您的显式类型转换不会有效地执行任何操作(除了可能会截断较大的值)。
在功能上,这两行是相同的:
int x = (char) 1;
int y = (int)(char) 1;
这两行也是相同的:
int x = (char) 257; // Truncated to 1
int y = 1;
推荐阅读
- python - 有一些我不理解的 Colab/Python 代码
- haskell - Haskell:Double 和 Int 之间的变量类型混淆
- flutter - Flutter - 使用一次性块将 StatefulWidget 转换为 HookWidget
- python - 从 txt 文件中提取字符串并将其添加到列表中 - Python3
- ssl - 如何在 NGINX 中将 TLS 客户端证书检查设置为强制并进行测试?
- android - android安全网nonce是否等同于web authnn的挑战?
- r - 如何在 R 的 ggplot2 中指定手动色标?
- javascript - 如何使用 tyscript 更改数组的格式
- windows - 应用程序关闭“err_proxy_connection_failed”
- html - 如何获取在Angular 8中动态生成的一组选择框中选择的值?