为什么我在这段代码中得到一个奇怪的数字?

问题描述 投票:0回答:5

我想编写一个C程序,对从1到5的整数的阶乘进行评估,并以表格格式打印它们。但是,我在所有方面都得到一个奇怪的数字。这是代码:

#include <stdio.h>

int main()
{
    int factorial;

    printf("X\t Factorial of X\n");

    for(int x=1; x<=5; x++)
    {
        factorial = 1;
        for (int j=1; j<=x; j++)
        {
            factorial *=j;
        }
        printf("%d\t %d\n", &x, &factorial);
    }

    return 0;
}

这是此代码的结果:

X        Factorial of X
6356768  6356772
6356768  6356772
6356768  6356772
6356768  6356772
6356768  6356772

我的代码有什么问题?结果应该是这样的:

X       Factorial of X
1       1
2       2
3       6
4       24
5       120
c factorial
5个回答
2
投票

删除&,它代表地址。您正在打印变量的地址,而不是其值。

    printf("%d\t %d\n", x, factorial);

0
投票

[当使用printf(和相关的[[output函数]时),%d格式说明符期望int作为相应的参数。在printf("%d\t %d\n", &x, &factorial);中,传递xfactorial变量的地址。

因此,只需删除两个&(的地址)运算符:printf("%d\t %d\n", x, factorial);

对于scanf(和其他input函数),%d说明符需要一个指向其目标变量的指针这一事实,您可能会感到困惑。


0
投票
printf(“%d \ t%d \ n”,&x,&factorial);&x和&factorial是这些变量的地址,而不是它们自己的变量。省略&。

0
投票
在语句中printf(“%d \ t%d \ n”,&x,&factorial);您已使用'&'来打印该元素的地址。

0
投票
scanf不同,格式为printf()%d需要

整数值,而不是地址(&x是包含整数的地址,因此指向类型为int *的整数的指针)。正确的表达式是

printf("%d\t %d\n", x, factorial);

为什么先前的表达式错误?

使用printf("%d\t %d\n", &x, &factorial);,您要打印f以分别打印xfactorial地址的十进制表示形式。

由于这个原因,63567686356772曾经用来打印的值并不奇怪:

    是大数,是4的倍数(因为它们寻址整数,大小为4字节,并且在像您这样的32位体系结构中对齐到4的倍数的内存位置)
  1. 它们是内存位置,即使更改了内容,其地址也不会改变

  • 您可以找到printf文档here
  • © www.soinside.com 2019 - 2024. All rights reserved.