これは私が直面した就職面接でした。彼らは配列を再割り当てできるかどうか尋ねましたが、私はそう答えました。次に、彼らは尋ねました-そして、ほとんどの人がメモリスペースを浪費するという理由を挙げているので、なぜポインターが必要なのか. 納得のいく回答ができませんでした。満足のいく答えを出せる機関があれば、私はその義務を負います。上記のステートメントが矛盾する可能性がある状況について言及してください。
ありがとうございました。
これは私が直面した就職面接でした。彼らは配列を再割り当てできるかどうか尋ねましたが、私はそう答えました。次に、彼らは尋ねました-そして、ほとんどの人がメモリスペースを浪費するという理由を挙げているので、なぜポインターが必要なのか. 納得のいく回答ができませんでした。満足のいく答えを出せる機関があれば、私はその義務を負います。上記のステートメントが矛盾する可能性がある状況について言及してください。
ありがとうございました。
再割り当てできるのは、動的に割り当てられたアレイのみです。静的に割り当てられた場合、[安全に]再割り当てすることはできません。*
ポインタはデータのアドレスをメモリに保持します。これらは、C++ではnew/ delete演算子を使用し、Cではmalloc / freeを使用して、動的に割り当て、割り当て解除、および再割り当てできます。
KernighanとRitchieによるCプログラミング言語と、HerbertSchildtによるC++ From theGroundUpのような堅実なC++テキストを読むことを強くお勧めします。
動的メモリ、ポインタ、オフセットなどを使用することはすべて、これら2つの言語を使用するための基本です。それらがどのように機能するのか、そしてなぜそれらが存在するのかを知らないことは、潜在的な雇用主があなたを断る理由となる可能性があります。
*コンパイラは静的に割り当てられたものを再割り当てすることを許可するべきではありませんが、再割り当てする場合、動作は未定義です
言い回しは少し奇妙ですが、インタビューの質問は、配列、ポインター、動的メモリ割り当てなどについて知っていることを説明するように設計されたオープンエンドの質問のように思えます。私がインタビュアーだったら、と の違いを明確にするint *a = malloc(10 * sizeof(int));
候補int a[10];
。フォローアップの質問はあまりうまく表現されていませんが、おそらく、ポインターと配列の違いの方向に候補者を突き刺し、一連の思考を開始する試みでした.
わかった。静的に宣言された配列を再割り当てすることはできません。(静的に宣言された配列の代わりに)ポインターを使用する目的は、スペースを再割り当てできるようにすることです。技術的に正しいと思いますが、静的に定義された配列にポインタを渡すことで再割り当てできますが、私はしたくありません。ポインタがmallocによって割り当てられていないメモリを指している場合、動作は未定義です。
ポインターを使用すると「メモリが浪費される」方法がよくわかりません。再割り当て機能: -
void *realloc(void *ptr, size_t size);
サイズを変更するメモリへのポインタをパラメータとして受け取ります。また、参照渡しなど、動的メモリ以外にもポインタの用途はたくさんあります。