gpt4 book ai didi

c - long int 参数 != long int 参数

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:59 29 4
gpt4 key购买 nike

将 1113355579999 作为参数传递时,该值在函数内部变为 959050335。

调用(main.c):

printf("%d\n", FindCommonDigit(1113355579999, 123457));

函数(ex4.c):

int FindCommonDigit(long int n1, long int n2) { printf("%d\n", n1); }

有什么问题?值得一提的是,在到达 printf 之前值会发生变化。

最佳答案

十进制数 1113355579999 太大,无法容纳 32 位整数,这是 long int 类型的常见大小,实际上是 is the size of long long int in your MSVC environment .在提供 32 位 long int 的 C 实现中,该常量的类型为 long long int

您可以将 long long int 传递给 long int 类型的参数,但是如果该值对于 long int 来说太大,则结果行为是实现定义的。可能保留了最低有效的 32 位,对于您的特定数字,这将导致数字 959050335(看起来很熟悉?)。要将参数传递给函数而不损失保真度,函数参数必须具有可以容纳参数的类型。在符合标准的 C 实现中,long long int 就足够了。

正确接收参数后,函数还必须将其正确呈现给 printf(),否则行为未定义。以十进制表示的 long long int 的格式化指令是 %lld

综合起来,您似乎想要这个:

int FindCommonDigit(long long int n1, long long int n2) {
printf("%lld\n", n1);

return /* ... something ... */;
}

确实需要函数返回一个int,否则行为又是未定义的。

此外,正如@pmg 在评论中观察到的,该函数的原型(prototype)必须在调用它的范围内。就是这样……

int FindCommonDigit(long long int n1, long long int n2);

... 在使用函数的源文件顶部附近(即 main.c)。如果愿意,您可以将其直接放入文件中,但您应该考虑将原型(prototype)放入头文件中并#include。如果函数将在多个源文件中使用,后者特别有用。

关于c - long int 参数 != long int 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47500358/

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