В отличие от Python, C #, Java и JavaScript, копирование объекта выполняется по значению, а не по ссылке. Для простых объектов, которые не имеют указателей или ссылок, это означает, что копирование объекта, такого как struct Student
, выполняется как глубокая копия.
Компилятор C ++ создает конструктор копирования для struct Student
, который копирует поле за полем (рекурсивно) из s1
в sArr[0]
. Вы можете определить свой собственный конструктор копирования, чтобы определить, как объект должен быть скопирован. В коде, подобном вашему, объект копируется, а не ссылка.
Если вы хотите только скопировать ссылку, то в вашем примере вы должны использовать указатели. Ссылки на Python, C # и Java являются сущностью, которая немного более ограничена, чем указатели C ++. Вот почему в вашем решении вам нужно будет использовать указатели:
struct Student
{
//struct info
};
int main()
{
Student s1, s2, s3, s4, s5;
Student *sArr[5] = {&s1, &s2, &s3, &s4, &s5};
}
Когда у вас есть:
sArr[0]->age=10;
Затем возраст s1
обновляется.
Другая альтернатива - поместить объекты в массив и использовать именованные ссылки для доступа к ним:
struct Student
{
//struct info
};
int main()
{
Student sArr[5];
Student &s1 = sArr[0];
Student &s2 = sArr[1];
Etc...
}
Разница между ссылками Python и ссылками C ++ заключается в том, что ссылки C ++ не могут быть переназначены и не могут быть нулевыми.