C语言中printf输出结果不正确

3

这可能是一个非常基础的问题,但我无法在任何地方找到答案,在几周的C编程之后,这是我第一次遇到这个问题。本质上,如果我编写一些类似于以下内容的代码:

int size;
scanf("%d", &size);
printf("size is %d", &size);

如果我输入,比如说 size = 2,程序会输出类似于 133692 或者类似的数字。为什么会这样?我做错了什么吗?

你知道&运算符首先是用来做什么的吗? - qrdl
没有一个答案被接受! - user1551592
@user9000 他是一个新用户,这是他的第一个问题,所以需要一些时间。 - NullPoiиteя
5个回答

3

尝试

printf("size is %d", size);
& 可以获得一个变量的内存地址。
printf("size is %d", &size);

因此,上述代码将打印size的内存地址(address),而不是size中存储的值。

1

你需要做的事情:

printf("size is %d", size);

使用print()函数。这将打印int对象size的值。

但是

 printf("size is %d", &size);

是未定义行为。


1
什么是未定义?很明显后者打印的是size的地址(编译器会给出警告)。 - Aki Suihkonen
2
@AkiSuihkonen d 转换说明符需要一个 int 参数,传递指向 int 类型的指针参数会引发未定义行为。 - ouah
如果你想打印出指针变量 &size 的值,你需要使用 %p 而不是 %d。 - Snips

0

printf语句中删除&,将&size改为size --> 这样会打印出变量的值而非地址。

      printf("size is %d", size);

0
您正在打印size的地址,即&size
只需传递一个普通的size即可。

0

在printf和scanf中,调用约定是不同的。

Printf的参数通常是按值传递(没有&),但scanf必须使用指针。(&)
(您无法将新值放入例如1.0,但可以打印它...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接