gpt4 book ai didi

c - C语言中int8_t变量始终为0

转载 作者:行者123 更新时间:2023-11-30 16:44:55 28 4
gpt4 key购买 nike

我正在自学C语言。

我编写了以下代码并执行了它。

没想到“第一个”变量是 0,尽管我输入了 4。

您能解释一下为什么会发生这种情况以及如何解决这个问题吗?

代码:

#include <stdio.h>
#include <stdint.h>

int main(void) {
int8_t first;
printf("Fist parameter:");
scanf("%d", &first);

int8_t second;
printf("Second parameter:");
scanf("%d", &second);

printf("%d * %d == %d\n", first, second, first * second);
return 0;
}

预期:

Fist parameter:4
Second parameter:5
4 * 5 == 20

实际:

Fist parameter:4
Second parameter:5
0 * 5 == 0

最佳答案

您在 scanf 中使用 %d 格式。 %d 假定它所使用的指针指向 int,它通常是一个 32 位值(尽管在不同的体系结构上它可以有不同的大小)。 int8_t 是一个单字节值。现在,许多计算机都基于 Intel x86 系列处理器,这是一种“小端”架构,这意味着从寄存器存储到内存中的值的低位部分进入到存储它的内存块(通常为 4 个字节)。因此,当您的程序将值 5 存储到中时,它实际上存储了四个字节数据,其十六进制形式为0x0000000505 存储在 second 中,低位 00 存储在 first 中,接下来的两个字节存储在 first 中。零覆盖了内存中“第一个”“旁边”的任何内容 - 所以,恭喜,您的程序存在内存覆盖错误!它可能不是致命的,但它就在那里。 :-)

作为实验,尝试将 firstsecond 的类型更改为 int。我敢打赌它会按预期工作。

祝你好运。

关于c - C语言中int8_t变量始终为0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44319746/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com