Структуры ссылаются по значению, а классы - по ссылке.
Это означает, что у вас всегда есть структура, и вы делаете присваивание, ее значения копируются, например, когда вы используете int a = b; a имеет значение b, а не точку, поэтому b, так что если вы измените значение a, b не будет обновлено.
Если у вас есть массив, он хранит вектор значений по умолчанию, указатели для классов и значение структуры по умолчанию для структур. Обратите внимание, что если структура содержит член, который является ссылочным типом (классом), указатель, установленный на ноль, сохраняется.
Предположим, у вас есть
Point p = new Point(0, 1);
Point[] pa = new Point[10];
pa[0] = p;
++p.X;
Поскольку Point - это структура (тип значения) при печати значений
p: {1, 1}
pa[0]: {0, 1}
pa[1-9]: {0, 0}
Для C ++ вы можете использовать foo (Point * pa) или foo (Point [] pa) для тех же результатов; в C # используйте foo (Point [] pa) в одномерном массиве. Для прямоугольного foo (Point ** pa) в C ++ и foo (Point [] []) в C #