8
#include <stdio.h>
 int main()        
{

           short int i = 20;

            char c = 97;

            printf("%d, %d, %d\n", sizeof(i), sizeof(c), sizeof(c + i));
            return 0;
}

sizeof(a+b) "a is short int type & b is char type" の出力が 2, 1, 4 の場合にどうなるか教えてください。

4

5 に答える 5

8

C の標準の整数昇格規則により、式の型はc + iですint。そのため、 と同等の結果が得られますsizeof (int)

は関数ではないことに注意してください。括弧は、型に名前を付けるときと、優先順位の競合を解決するsizeofときにのみ必要です。あなたのコードは次のように書けます:

printf("%zu, %zu, %zu\n", sizeof i, sizeof c, sizeof (c + i));

の最終的な使用は、よりも厳密にバインドされるため、sizeof括弧があり、これは望ましい結果ではないとして解析されます。sizeof+sizeof c + i(sizeof c) + i

また、ほとんどの場合、これはコンパイル時の構成要素であり、式が実際に評価されることはないことに注意してください。コンパイラがそれを評価し、式の型を把握し、その型の値のサイズを与える「ふりをする」だけです。実際の値が存在する必要はありません。

によって返される値の型は でsizeofありsize_t、これは を使用して出力されます%zu(それは ではありませんint)。

于 2013-05-07T10:06:04.150 に答える
4
1) sizeof(i) ==> sizeof(short int) = 2

2) sizeof(c) ==> sizeof(char) = 1

3) sizeof(c + i [97+20]) ==> sizeof(int) = 4 // result in constant value which is int as default 
于 2013-05-07T10:03:36.437 に答える
1

他の人が言ったように、 sizeof はコンパイル時に計算されます。

ここで、c + ic と i が int に昇格 (積分昇格) されるため、整数式の値は、したがって

sizeof( c + i )

32ビットマシンでは4バイトになります..

于 2013-05-07T10:08:56.923 に答える
0

sizeof は、式のサイズを取得するためにコンパイル時にのみ機能します。

以下は実際には 'c' を増やしません:

c = sizeof(++c);

式 sizeof(a + b) は、符号なしが優先される最大の型を返します

于 2013-05-07T10:03:18.163 に答える
0

a のデータ型は「short int」です。-32768 ~ +32767

c のデータ型は「char」です。0~255

c に a を追加すると、short intでもcharでもなく、 intになります!

変数のデータ型を取得するのに役立つコード例を次に示します。

#include <typeinfo>

int main()
{
    short int a = 1;
    char c = 'A';
    std::cout << typeid(a + c).name() << std::endl;

    return 1;
}
于 2013-05-07T10:07:38.830 に答える