Comments
Description
Transcript
【プレポスト】C言語プログラミング(メモリ、ポインタ編)
解説 1/4ページ 【プレポスト】C言語プログラミング(メモリ、ポインタ編) 1 正解:3 C言語で扱うメモリ領域はコード領域(プログラム領域)、静的領域、スタック領域、動的領域(ヒープ領域)の4つに 大別されます。静的領域には、グローバル変数やstatic変数、リテラルが格納され、スタック領域にはローカル変数 や関数仮引数が格納されます。 「参考ページ」 1章9ページから13ページ (配点:5 点) 2 正解:4 スタック領域には、ローカル変数や関数の領域が確保されます。その領域は変数の宣言時に確保されて、関数を 終了したときに開放されます。またメモリの管理はLIFO方式で行われます。 「参考ページ」1章13ページ (配点:5 点) 3 正解:2 register指定された変数は、レジスタの格納領域が小さいため、必ずしもレジスタに置かれるとは限りません。ま た、記憶クラスを省略した変数の記憶クラス指定子はautoになります。 「参考ページ」1章15ページ (配点:5 点) 4 正解:4 ポインタ変数には変数のアドレスを格納し、ポインタ変数と変数でデータをやりとりするには、&演算子や*演算 子を使用します。なお、ポインタ変数に1加算すると、アドレスはポインタの型に応じたバイト数分加算されます。 「参考ページ」1章18ページから24ページ (配点:5 点) 5 正解:1 関数間で配列の先頭アドレスを受け渡す際には、配列の先頭アドレスを受け取っただけでは配列の要素数を調べ ることができません。配列の要素数を調べるには、別途、引数で渡す必要があります。 「参考ページ」2章33ページから36ページ (配点:5 点) 解説 2/4ページ 6 正解:4 sizeof演算子は引数のサイズをバイト数で返します。引数には、[型名・オブジェクト・配列・構造体・共用体・関数] を指定できます。int a[5];の場合は、sizeof(a)という指定をすると、20という結果が返ってきます。 「参考ページ」2章36ページ (配点:5 点) 7 正解:3 signedとunsignedは変数宣言時に使用し、変数の符号付き/無しを指定する型指定子です。関数に渡した値を変更 できないようにするには、const型修飾子を付けて宣言します。 「参考ページ」2章37ページ (配点:5 点) 8 正解:1 ポインタ配列の宣言は、int *p[3];になります。int (*p)[3]; と int (*p)[];はint型の配列へのポインタという意味にな り、int *p[]; という宣言はコンパイルエラーになります。 「参考ページ」2章40ページと48ページ (配点:5 点) 9 正解:4 多次元配列とは2次元以上の配列のことで、配列の配列と解釈することができます。多次元配列の要素には、int やdoubleのようなデータ型やポインタ(アドレス)を格納することができます。 「参考ページ」2章46ページから48ページ (配点:5 点) 10 正解:2 C言語では文字列リテラルは""(ダブルクォテーション)で囲んで表し、終端には末尾を識別するための特殊記号 ナル文字('\0')が付加されます。sizeof演算子を利用して、文字列リテラルのサイズを算出する際の結果は、文字数 にナル文字('\0')を加えた値になります。 「参考ページ」3章59ページから61ページ (配点:5 点) 解説 3/4ページ 11 正解:3 ""(ダブルクォテーション)で囲んだ文字列の終端には自動的に'\0'が付加されますが、''(シングルクォテーション) で1文字ずつ格納する方法では、手作業で'\0'を記述する必要があります。 「参考ページ」3章59ページ (配点:5 点) 12 正解:1 &str[0]は配列(要素数5)の先頭アドレスです。従って仮引数では、char型の配列(要素数5)へのポインタ変数を宣 言する必要があります。&str[0][0]はchar型のデータ(1要素)のアドレスを意味するため、仮引数は「char *p」になり ます。 「参考ページ」3章77ページと78ページ (配点:5 点) 13 正解:4 void kansu(char *p);と宣言すると戻り値はvoid型の意味になるため間違いです。他2つの選択肢のような宣言はコ ンパイルエラーになります。 「参考ページ」3章69ページ (配点:5 点) 14 正解:2 argcには、プログラム名を含んだコマンドライン引数の個数が格納されます。したがって設問の場合、「>Prog FLM 1 2」 と実行すると、argcには4という数値が格納されます。argvには、引数(文字列)を指し示すポインタ配列の先頭 アドレスが格納されます。 「参考ページ」3章85ページから90ページ (配点:5 点) 15 正解:3 ポインタを用いて構造体のメンバにアクセスをするには、->(アロー演算子)を使用します。よってx->ageが正解にな ります。また、.(ドット演算子)を使用するには、(*x).ageと記述します。 「参考ページ」4章103ページ (配点:5 点) 解説 4/4ページ 16 正解:3 構造体の大きさは、常にメンバの大きさの合計と等しいとは限りません。処理系に応じたアライメント(境界調整)に より、メンバの大きさの合計よりも、構造体のサイズが大きくなることもあります。 「参考ページ」4章101ページ (配点:5 点) 17 正解:2 動的メモリを確保するにはmalloc関数を用い、解放するにはfree関数を用います。 「参考ページ」5章126ページから130ページ (配点:5 点) 18 正解:4 リスト構造ではポインタ変数を書き換えることによってデータの並びを変更できるため、動的に生成したノードの追 加や既存のノードの削除を随時行うことが出来ます。 「参考ページ」5章141ページ (配点:5 点) 19 正解:1 関数も変数と同様にメモリ上に配置されるため、関数にもアドレスが存在しています。従って関数のアドレスを指定 することで、関数を実行することができます。 「参考ページ」6章161ページと162ページ (配点:5 点) 20 正解:3 qsprt関数は、指定した配列の要素を並び替える標準関数であり、並び替える配列の要素型に制限はありません。 第4引数には、要素の入れ替えを行うかを判断する比較関数のポインタを指定します。ただし、比較関数は、プログ ラマが別途用意する必要があります。 「参考ページ」6章169ページ (配点:5 点) 合計点 All Rights Reserved, Copyright (C) Fujitsu Learning Media Limited