-3

が期待されるときに acharが返されるとどうなるか誰かが知っていますか?int

char testunc1(char a)
{
    return a;
}

void main()
{

    int x1;
    x1 = testfunc1(7);
    printf("%d\n",x1);
}
4

3 に答える 3

5

暗黙的に に変換さcharます。int

C99 標準のセクション6.5.16.1パラグラフ 2:

単純代入( )では=、右オペランドの値が代入式の型に変換され、左オペランドで指定されたオブジェクトに格納されている値が置き換えられます。

代入式のタイプは、セクション6.5.16パラグラフ 3で定義されています。

代入式の型は、左のオペランドが修飾された型を持たない限り、左のオペランドの型です。修飾された型の場合は、左のオペランドの型の非修飾バージョンです。

変数は typeintであるため、返さcharれる値は、C99 標準のセクション6.5.16.1intで指定されている型に変換されます。

この場合、値7は で完全に表すことができるため、 が変数に格納さintれるため、精度が失われることはありません。7int

于 2013-07-11T12:32:13.917 に答える
4

関数が呼び出されるintと、暗黙的に にキャストされcharます。127 までの値に適合するため、これcharは問題なく機能します。その後、関数から返された結果は にキャストバックされます。これは、 に収まるすべての値に適合するようにint再び機能します。intchar

于 2013-07-11T12:32:51.860 に答える
2

C では、すべての算術型の間に暗黙的な変換があります。そのため、ここでは、関数に渡されるときにint7が暗黙的に変換されます。戻り値を代入する場合も同様(戻り値を に変換)。chartestunc1testfunc1x1charint

于 2013-07-11T12:32:20.997 に答える