この演習をオンラインで見つけましたが、結果が「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;
}
この演習をオンラインで見つけましたが、結果が「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;
}
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 番目の数値がゼロであることがわかります。