-2
#include<stdio.h>
#include<conio.h>
void main()
{
int a=10,b=11;
clrscr();
printf("%d");
getch();
}

Output=11 printf 関数で変数名を指定していないのに、出力が 11 になる方法。

4

2 に答える 2

5

11 は変数のためにスタックbprintf()にあり、変数が渡される場所であるため、関数はスタック上の値をスタック上で探しています。

を追加するc=47と、おそらく 47 になります。ただし、これは未定義の動作です。

于 2013-09-07T16:32:07.817 に答える
3

これは「未定義の動作」と呼ばれ、プログラムはほぼ何でもできることを意味します。

この場合、実際に起こっていることは、変数と関数パラメーターの両方がスタックに置かれることです。printf が期待するパラメーターを渡していないため、変数であるスタックから何か他のものを引き出すことになりますb

ただし、これは未定義の動作であるため、別のコンパイラ、別の CPU、またはより高い最適化レベルなどの別のコンパイル オプションを使用すると、非常に異なる結果が得られる可能性があります。

于 2013-09-07T16:31:35.337 に答える