大丈夫、これはおそらく本当にシンプルですが、ポインタ、配列、メモリ割り当てについてサイト全体を見渡しましたが、説明が少し複雑すぎます。だから...誰かが私に以下のコードの中の別のものを指している理由を説明できますか?私は何をする必要があるかけれどもポインタ、配列、および構造体(およびメモリの割り当て)?
typedef struct data_t {
int ival;
char *sval;
} data_t;
void f1(data_t **d);
int main()
{
data_t *d;
d = new data_t[500];
for (int i=0; i<500; i++)
{
d[i].ival= i+1;
d[i].sval="$";
}
f1(&d);
}
void f1(data_t **d)
{
for (int i=0; i<500; i++)
{
d[i]->ival=i+1;
d[i]->sval="$";
}
}
は整数フィールド「IVAL」は、配列のインデックス0から499、および文字列フィールド」の値が1から500を有するように配列の500個の各要素を埋めるありますsval 'には配列インデックス0〜499の文字列 "$ 1" - "$ 500"が含まれています。関数呼び出しで。
も:
d = new data_t[500]
私は構造体の500要素の配列にメモリを割り当てるために必要なすべてのですか?
ちょうどそれがポインタが何か間違った道を指しているデバッガを見て...関数呼び出しで、メインのループのために動作しますが、いない理由を把握しようと...
これはまさに問題でした... 今、私はsvalにint iを変更するつもりですか?これは間違っていますが、例です sval =( '$' + char(i + 1)+ '\ 0'); – Sun
@Sun: 'char *'を 'std :: string'に変更します。 –
ええ、それはうまくいくことは分かっていますが、これは実際にインタビューのためのテストです...要件とそれ以外のもの 彼らは言われて以来、私はどこかmalloc()を使用したいと確信しています... – Sun