gpt4 book ai didi

c - 为什么在 C 语言中可以在一个字节中分配一个大数字?

转载 作者:行者123 更新时间:2023-11-30 17:29:46 25 4
gpt4 key购买 nike

int *ptr = malloc(sizeof(char));

*ptr = 100000;

printf("%d\n", *ptr); // 100000

难道不应该只为 char 分配足够的内存,即 1 个字节吗?那么最大的数字不应该是255吗?

它如何仍然打印100000

更新

感谢您的回答。如果它覆盖了接下来的字节,那么C如何知道这个数字大于一个字节,而不仅仅是查看第一个字节?

最佳答案

因为C没有内存范围检查。它分配一个字节,然后通过指针进行的分配会覆盖它和接下来的三个字节。如果您在第一个 malloc 之后、分配之前分配了另一位内存,则可能会覆盖部分堆(取决于您的 malloc 的工作方式)。

这就是为什么指针在 C 中非常危险。

格式语句中的%d(加上变量的类型)告诉编译器您正在查看int,并访问所有四个字节。

请注意,如果您确实已将值分配给字符,例如char *ptr; *ptr = 100000;

然后对于某些编译器(假设普通的 char 被视为有符号但默认),它将打印出 -96,而不是 255(或 127)。这是因为编译器不会自动将值限制为可以容纳的最高值(有符号字符为 127,无符号字符为 255),而只是溢出。大多数编译器会提示您试图分配一个使变量溢出的常量值。

它是 -96 的原因是 100000 % 256 是 160,但作为有符号字符,它输出为 -(256-160)。

关于c - 为什么在 C 语言中可以在一个字节中分配一个大数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25512651/

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