Для примитивного типа данных, такого как int
, двойные указатели не нужны. Вы можете писать непосредственно в адрес, где хранится int
, обрабатывая его адрес как указатель вызываемой функции. Это не похоже на массив char
(«строка»), где размер указателя указывает на переменную, и поэтому вы должны использовать другой уровень косвенности при изменении его из вызываемой функции. Попробуйте следующее:
void foo(int *oldVal)
{
int newVal = 99; // or whatever you want
*oldVal = newVal;
}
int main(int argc, char *argv[])
{
int someVal = 0;
foo(&someVal); // we send its address to foo()
printf("someVal is now %d.\n", someVal);
return EXIT_SUCCESS;
}
Если Вы имеете в виду оперативный вид (т.е. список обновляется):
people.Sort((x, y) => string.Compare(x.LastName, y.LastName));
, Если Вы имеете в виду новый список:
var newList = people.OrderBy(x=>x.LastName).ToList(); // ToList optional
Вам нужен список, который будет отсортирован на месте, или просто заказанная последовательность содержания списка? Последний легче:
var peopleInOrder = people.OrderBy(person => person.LastName);
Для сортировки на месте Вам было бы нужно IComparer<Person>
или Comparison<Person>
. Для этого можно хотеть рассмотреть ProjectionComparer
в MiscUtil.
(я знаю, что продолжаю обеспечение MiscUtil - это просто продолжает быть релевантным...)
people.OrderBy(person => person.lastname).ToList();