1

以下の例では:

int main(int argc, char *argv[])
{
    int16_t array1[] = {0xffff,0xffff,0xffff,0xffff};
    char array2[] = {0xff,0xff,0xff,0xff};
    printf("Char size: %d \nint16_t size: %d \n", sizeof(char), sizeof(int16_t));

    if (*array1 == *array2)
        printf("They are the same \n");
    if (array1[0] == array2[0])
        printf("They are the same \n");

    printf("%x \n", array1[0]);
    printf("%x \n", *array1);

    printf("%x \n", array2[0]);
    printf("%x \n", *array2);
}

出力:

Char size: 1 
int16_t size: 2 
They are the same 
They are the same 
ffffffff 
ffffffff 
ffffffff 
ffffffff

と の両方に 32 ビット値が表示されるのはなぜcharですかint16_t? また、それらを比較して同じと見なすことができるのはなぜですか?

4

3 に答える 3

1

実行時に C には型情報がなく%x、印刷にプレーンを使用するためprintf、ポインターが を指していることを伝えますunsigned int。貧弱なライブラリ関数はあなたを信頼するだけです...必要な情報を提供する方法については、長さ修飾子を参照してください。printf(3)printf

于 2015-07-22T12:07:25.910 に答える