わかりました、これはおそらく非常に単純ですが、ポインター、配列、およびメモリ割り当てについてサイト全体を調べましたが、いくつかの説明は私には少し複雑すぎます. それで... d[i] が以下のコードで異なるものを指している理由を誰かが私に説明できますか?
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を持ち、文字列フィールド「sval」に文字列「$ 1」が含まれるように、配列の500要素のそれぞれを埋めることです」 – 配列インデックス 0 ~ 499 の場合は「$500」。関数呼び出しで。
も、また
d = new data_t[500]
構造体の 500 要素配列にメモリを割り当てる必要があるのは?
メインの for ループでは機能するが、関数呼び出しでは機能しない理由を理解しようとしているだけです...デバッガーを見ると、ポインターは何か間違ったことを指しています...