gpt4 book ai didi

c - 为什么这个简单的 C 代码以相反的顺序打印地址? (例如 4214868 4214864)

转载 作者:太空宇宙 更新时间:2023-11-04 05:51:55 25 4
gpt4 key购买 nike

打印ij的地址。

#include<stdio.h>
int i,j;
void main()
{
printf("%u %u",&i,&j);
getch();
}

输出:

4214868 4214864

最佳答案

#include<stdio.h>
int i,j;
void main()

这是错误的。 (这有点过于简单化,但已经足够接近了。)正确的声明是 int main(void) .

{
printf("%u %u",&i,&j);

"%u" format 需要类型为 unsigned int 的参数.通过 int*指针值导致未定义的行为。打印地址的正确方法是:

printf("%p %p\n", (void*)&i, (void*)&j);

注意 \n : 程序的输出应该以换行符结尾。

    getch();

没有getch()<stdio.h> 中声明的函数.如果您在该调用中至少没有收到警告,您应该了解如何在编译器中启用更好的诊断。

您可能正在尝试调用 getch()在 Windows(和 DOS?)特定的 <conio.h> 中声明的函数 header 。这会使您的程序不必要地不可移植。

}

至于它打印的值,C 标准没有说明变量的相对地址。编译器可以自由地以任何它喜欢的方式分配它们。你没有充分的理由关心是否ij 之前或之后分配在内存中。

关于c - 为什么这个简单的 C 代码以相反的顺序打印地址? (例如 4214868 4214864),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618506/

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