C入門7 課題回答例
1. 次のプログラムを実行すると、出力されるものは何だと思いますか。
実際に試してください。(できれば、隣近所の人と結果をくらべてみてください。)
#include <stdio.h>
int main(void)
{
int x = 100;
printf("%d", &x);
return 0;
}
100ではなく、xのアドレスが10進数表示で示される。
2. 次のプログラムを実行すると、出力はどうなると思いますか。
まず予想して、それから、試してみてください。
#include <stdio.h>
int main(void)
{
int a[] = {1, 2, 3};
int *p = a;
printf("%d", *(p + 2));
return 0;
}
「p + 2」は、a[2]のアドレスを表す。
したがって、「*(p + 2)」はそのアドレスにある変数、つまり、a[2]そのもの。
結局、3と出力される。
3. 次のプログラムを実行すると、出力はどうなると思いますか。
まず予想して、それから、試してみてください。
#include <stdio.h>
int main(void)
{
int i;
int a[] = {1, 2, 3};
*a = 100;
*(a + 1) = 200;
*(a + 2) = 300;
for(i = 0; i < 3; i++)
printf("%d", a[i]);
return 0;
}
「100200300」と出力される。
これは100、200、300の出力。(間をあけていないのでつながる。)
4. 次のプログラムを実行すると、出力はどうなると思いますか。
まず予想して、それから、試してみてください。
#include <stdio.h>
int main(void)
{
int i;
int a[] = {1, 2, 3};
int *p = a;
*p = 100;
*(p + 1) = 200;
*(p + 2) = 300;
for(i = 0; i < 3; i++)
printf("%d", a[i]);
return 0;
}
問3のプログラムと同じ結果になる。
5. 次のプログラムを実行すると、出力はどうなると思いますか。
まず予想して、それから、試してみてください。
#include <stdio.h>
int main(void)
{
int i;
char a[] = "hello";
*a = 'H';
*(a + 1) = 'E';
*(a + 2) = 'L';
for(i = 0; i < 5; i++)
printf("%c", a[i]);
return 0;
}
最初の3文字がH、E、Lに置き換わるので、「HELlo」と出力される。
6. 次のプログラムが問5のプログラムと同様に動作するように、
/* ここ */に入れるべきコードを書いてください。
#include <stdio.h>
int main(void)
{
int i;
char a[] = "hello";
/* ここ */
*p = 'H';
*(p + 1) = 'E';
*(p + 2) = 'L';
for(i = 0; i < 5; i++)
printf("%c", a[i]);
return 0;
}
「char *p = a;」です。