構造体のメモリブロック内の構造体へのポインタを増やすことはできません。しかし、それは動作するようです。これがうまくいかない場合はありますか?構造体の "リスト"を作成すると、ポインタを増やすことができるはずです。Cは移動するバイト数を把握します。C構造体ポインタの反復
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct User {
int id;
char name[32];
float net_worth;
};
typedef struct User User;
int main(int argc, char** argv) {
User* u1 = (User*)malloc(sizeof(User));
u1->id = 1;
strcpy(u1->name, "Mike");
u1->net_worth = 43.45;
User* u2 = (User*)malloc(sizeof(User));
u2->id = 2;
strcpy(u2->name, "Pablo");
u2->net_worth = -2.00;
User* u3 = (User*)malloc(sizeof(User));
u3->id = 3;
strcpy(u3->name, "Frederick");
u3->net_worth = 7329213.45;
User** users = (User**)malloc(sizeof(User)*10);
*users = u1;
printf("%s\n", ((User*)(*users))->name);
*users++;
*users = u2;
printf("%s\n", ((User*)(*users))->name);
*users++;
*users = u3;
printf("%s\n", ((User*)(*users))->name);
return 0;
}
質問は正確には何ですか、正しく動作することがわかりますか? –
さて、私は何かが欠落していないことを確認したいと思います。 –
'* users ++'という式を使用している特別な理由は何ですか? '*'は余計です( '++ 'の結果を単に逆参照します)。また、 'users'自身ではなく、' * users'をインクリメントしようとしているように思われるかもしれません。 –