0

この演習をオンラインで見つけましたが、結果が「aaaaaaaa」である理由がわかりません。手伝って頂けますか ?

#include <stdio.h>

void a(char * s) {
    while(*s++ != '\0')
    printf("a");
}

int main() {
    int data[5] = {-1,-3,256,-4,0};
    a((char *) data);
    return 0;
}
4

2 に答える 2

0

int のサイズが 4 バイトで、int:s が2 の補数を使用して格納されている場合、出力は aaaaaaaa (8 つの a:s) になります。数値 -1 と -3 では、すべてのバイトが非ゼロであるため、8 つの a: が出力されます。数値 256 では、最下位 (および最上位) バイトがゼロであるため、while ループが停止します。

バイトごとに配列バイトを印刷する場合

#include <stdio.h>

int main(void)
{
    int data[5] = {-1, -3, 256, -4, 0}, i;
    const char *p;

    p = (char *) data;
    for (i = 0; i < sizeof (data); i++) {
        printf(" %d", p[i]);
    }
    printf("\n");
    return 0;
}

あなたが得る

-1 -1 -1 -1 -3 -1 -1 -1 0 1 0 0 -4 -1 -1 -1 0 0 0 0

ここで、9 番目の数値がゼロであることがわかります。

于 2020-11-28T18:23:50.460 に答える