「Cを難しい方法で学ぶ」ことを通してCを学び、私自身の演習のいくつかを行います。私は次の問題に遭遇しました。
私が次の構造を持っているとしましょう:
struct Person {
char name[MAX_INPUT];
int age;
}
main()で、次の配列を宣言しました。
int main(int argc, char *argv[]) {
struct Person personList[MAX_SIZE];
return 0;
}
ここで、2つの関数が離れているとしましょう(mainはfunction1を呼び出し、function2を呼び出します)。main関数で宣言した配列内の人を次のように保存します。
int function2(struct Person *list) {
struct Person *prsn = malloc(sizeof(struct Person));
assert(prsn != NULL); // Why is this line necessary?
// User input code goes here ...
// Now to save the Person created
strcpy(prsn->name, nameInput);
ctzn->age = ageInput;
list = prsn; // list was passed by reference by function1, does main need to pass the array by
// reference to function1 before?
// This is where I get lost:
// I want to increment the array's index, so next time this function is called and a
// new person needs to be saved, it is saved in the correct order in the array (next index)
}
したがって、メインの機能に戻って、そこに保存されている最初の3人を次のように印刷したい場合は次のようになります。
...
int i = 0;
for(i = 0; i < 3; i++) {
printf("%s is %d old", personList[i].name, personList[i].age);
}
...
基本的に、永続性を維持しながら、アプリケーション全体で配列を参照する方法。mainは、必ずしも配列を利用する関数を直接呼び出すとは限らないことに注意してください。誰かがそれをグローバル変数として宣言することを提案しているのではないかと疑っています。それでは、代替手段は何でしょうか?ダブルポインタ?ダブルポインタはどのように機能しますか?
お時間をいただきありがとうございます。