为什么我在这段代码中得到一个奇怪的数字?
Why am I getting a strange number in this code?
我想编写一个 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
删除代表地址的&
。您正在打印变量的地址,而不是它的值。
printf("%d\t %d\n", x, factorial);
当使用 printf
(以及相关的 output 函数)时,%d
格式说明符需要一个 int
作为相应的参数。在您的 printf("%d\t %d\n", &x, &factorial);
中,您正在传递 x
和 factorial
变量的 地址 。
所以,只需删除两个 &
(地址)运算符:printf("%d\t %d\n", x, factorial);
!
您可能对以下事实感到困惑:对于 scanf
(以及其他 input 函数),%d
说明符需要指向其目标变量的指针。
printf("%d\t %d\n", &x, &factorial);
&x 和 &factorial 是这些变量的地址,而不是变量本身。省略 &.
与 scanf
不同,格式 %d
的 printf()
需要 整数值 ,而不是地址(&x
是包含以下内容的地址一个整数,所以一个指向整数的指针,类型为 int *
)。正确的表达方式是
printf("%d\t %d\n", x, factorial);
为什么之前的表达是错误的?
对于 printf("%d\t %d\n", &x, &factorial);
,您要求 printf 分别打印 x
和 factorial
地址的十进制表示。
因此,过去打印的值 6356768
和 6356772
:
也就不足为奇了
- 是大数字,4 的倍数(因为它们寻址整数,大小为 4 字节,并且在像您这样的 32 位体系结构中与 4 的倍数的内存位置对齐)
- 它们是内存位置,即使内容改变它们的地址也不会改变
您可以找到 printf
文档 here。
语句中printf("%d\t %d\n", &x, n factorial);您使用了“and”来打印该元素的地址。
我想编写一个 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
删除代表地址的&
。您正在打印变量的地址,而不是它的值。
printf("%d\t %d\n", x, factorial);
当使用 printf
(以及相关的 output 函数)时,%d
格式说明符需要一个 int
作为相应的参数。在您的 printf("%d\t %d\n", &x, &factorial);
中,您正在传递 x
和 factorial
变量的 地址 。
所以,只需删除两个 &
(地址)运算符:printf("%d\t %d\n", x, factorial);
!
您可能对以下事实感到困惑:对于 scanf
(以及其他 input 函数),%d
说明符需要指向其目标变量的指针。
printf("%d\t %d\n", &x, &factorial); &x 和 &factorial 是这些变量的地址,而不是变量本身。省略 &.
与 scanf
不同,格式 %d
的 printf()
需要 整数值 ,而不是地址(&x
是包含以下内容的地址一个整数,所以一个指向整数的指针,类型为 int *
)。正确的表达方式是
printf("%d\t %d\n", x, factorial);
为什么之前的表达是错误的?
对于 printf("%d\t %d\n", &x, &factorial);
,您要求 printf 分别打印 x
和 factorial
地址的十进制表示。
因此,过去打印的值 6356768
和 6356772
:
- 是大数字,4 的倍数(因为它们寻址整数,大小为 4 字节,并且在像您这样的 32 位体系结构中与 4 的倍数的内存位置对齐)
- 它们是内存位置,即使内容改变它们的地址也不会改变
您可以找到 printf
文档 here。
语句中printf("%d\t %d\n", &x, n factorial);您使用了“and”来打印该元素的地址。