使用%d类型转换会导致输出值不正确

-2 c printf casting

在我最近编写的一个程序中,我遇到了一个相当奇怪的错误,经过大量研究,我无法弄清楚它为什么会发生.我使用printf显示一个字符串,后跟一个整数到stdout.这看起来像是一个想法:

printf("The number of characters on the screen is %d", &numberofchar); 
Run Code Online (Sandbox Code Playgroud)

很标准吧?该变量被声明为一个整数并初始化为1.循环后,整数保持正确的值,例如3,在调试中我可以确认变量在printf语句中赋值.

但是从stdout读取时的输出是一个很大的随机数,例如2530801.

我想了解为什么会发生这种情况并知道是否有任何替代方案,例如使用%i阻止此错误发生.我想象它在堆栈中的某种错误,但我对C的了解并不是太深入.

谢谢您的帮助.

注意:这适用于所有printf("%d", &int_variable)用于在程序中输出整数的实例.所有整数的值总是小于20.

cad*_*luk 5

我想象它[sic]在某种程度上是一个错误[...]

是的,有点儿.

printf%d格式说明期望一个int,指针.
既然%i相当于%d,%i就没有任何进步.

使用

printf("%d", int_variable);
Run Code Online (Sandbox Code Playgroud)

代替.