Cの配列とポインタの問題 [コンピューター]
巷はどこもかしこもコロナウイルス対策で自宅待機状態なので、暇つぶしにCの配列に関するポインタの問題を作ってみました。「Cの配列とポインタの関係なんて、とっくの昔に理解したよ!!」という方は、以下の(ア)〜(ハ)の穴埋め問題をやってみてください。一つでも不安のある箇所がある方は、恐らくまだCの配列とポインタの関係を理解できていないと思います。
(1) int a[3] = {0, 1, 2};
で、sizeof(int)=4Bの場合、sizeof(a)は(ア)であり、この場合のaの型は(イ)である。
また、aは配列の先頭要素へのポインタの意味も持ち、&aの型は(ウ)であり、&a=0x7ffeebfbff49c の場合、&a+1のアドレスは(エ)になる。
また、aの型は(オ)であり、a=0x7ffeebfbff49c の場合、a+1のアドレスは(カ)になる。
(2) int a[5][3] = {
{0, 1, 2},
{3, 4, 5},
{6, 7, 8},
{9, 10, 11},
{12, 13, 14}};
で、sizeof(int)=4Bの場合、sizeof(a)は(キ)であり、この場合のaの型は(ク)である。
また、aは配列の先頭要素へのポインタの意味も持ち、&aの型は(ケ)であり、&a=0x7ffeebfbff460 の場合、&a+1のアドレスは(コ)になる。
また、aの型は(サ)であり、a=0x7ffeebfbff460 の場合、a+1のアドレスは(シ)になる。
また、a[0]の型は(ス)であり、a[0]=0x7ffeebfbff460 の場合、a[0]+1のアドレスは(セ)になる。
また、*(*(a+3)+2)の値は(ソ)である。
(3) int a[3][4][2] = {
{{0, 1}, {2, 3}, {4, 5}, {6, 7}},
{{8, 9}, {10, 11}, {12, 13}, {14, 15}},
{{16, 17}, {18, 19}, {20, 21}, {22, 23}}};
で、sizeof(int)=4Bの場合、 sizeof(a)は(タ)であり、この場合のaの型は(チ)である。
また、aは配列の先頭要素へのポインタの意味も持ち、&aの型は(ツ)であり、&a=0x7ffeebfbff430 の場合、&a+1のアドレスは(テ)になる。
また、aの型は(ト)であり、a=0x7ffeebfbff430 の場合、a+1のアドレスは(ナ)になる。
また、a[0]の型は(ニ)であり、a[0]=0x7ffeebfbff430 の場合、a[0]+1のアドレスは(ヌ)になる。
また、(*(a[2]+3))[1]の値は(ネ)である。
また、a[0][0]の型は(ノ)であり、a[0][0]=0x7ffeebfbff430 の場合、a[0][0]+1のアドレスは(ハ)になる。
不安な箇所は、実際に自分でプログラムを書いて確認してみると良いと思います。
by チイ
コメント 0