2013-10-26 8 views
6

は、私は技術的なインタビューにあったし、このような構造を作るように頼ま...

struct student{ 
       int rollno; 
       char name[10]; 
       int arr[]; 
       }stud1, stud2; 

今stud1するマークの4つの記録、の5つのレコードを与え、構造を作成し、それをこのような3人のメンバー与えますスタッド2のマーク。 私はインタビュアーに、アレイにある程度のサイズを与えなければならないと言いました。そうでなければ、スペースを割り当てられないか、コンパイラーエラーが発生します。 彼はCの新しい基準によれば、可能であると言いました。 最後に、私はそれを行う方法を理解できませんでした。誰にも提案がありますか? 私はreallocを実行しようとしましたが、動作するかどうかはわかりませんでした。

+1

私は共有が好きです。問題は理にかなっており、あなたの経験とよく関連しています。この種の質問は確かに求職者によって評価されます:) – Rerito

答えて

8

自動オブジェクト(stud1とstud2)を宣言できないため、サンプル自体が間違っています。でも書くことができます

struct student *s = malloc(sizeof *s + number_of_arr_elems * sizeof s->arr[0]); 
+0

しかし、このようなスペースを与える必要があった、私は構造内のポインタも目的を果たすことができることを意味.. – mrigendra

+1

あなたは、メモリ領域。例えば。今、あなたは「自由」で終わります。ポインタには余分な 'free(s-> arr)'が必要です。ヒープ上に2つのオブジェクトを1つずつ割り当てる必要があるため、パフォーマンスが別の理由になる可能性があります。 – ensc

3

フレキシブルアレイメンバです。この機能はC99で追加されました。構造体の最後のメンバーが不完全な配列型を持つことができます。この機能はC99 Standardの6.7.2.1で説明されています。

「特殊な場合として、複数の名前付き部材と構造体の最後の要素は、不完全な配列型を有することができる;これは、可撓性のアレイメンバーと呼ばれている[...]」

この段落の残りの部分では、その使用法について説明しています。

関連する問題