Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c#_Presentation_8.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
143.87 Кб
Скачать

8.1.3. Доступ к члену структуры с использованием указателя

Пример использования оператора доступа к члену структуры (p – это указатель на структуру содержащую член x):

Coords* p = &home;

p -> x = 25; // Оператор доступа к члену ->

Примечание. Выражение p->x эквивалентно выражению (*p).x , поэтому, используя любое из них можно получить одинаковый результат.

Пример 8.3. Объявление структуры Coords, содержащей две координаты x и y, и создание ее экземпляра. С помощью оператора доступа к членам -> и указателя на экземпляр home координатам x и y присваиваются значения.

// Компилировать с /unsafe

struct Coords

{ public int x;

Public int y;

}

class AccessMembers

{ static void Main()

{ Coords home;

unsafe

{ Coords* p = &home;

p->x = 25;

p->y = 12;

System.Console.WriteLine("Координаты: x={0}, y={1}",

p->x, p->y);

}

System.Console.ReadLine();

}

}

// Вывод: Координаты: x=25, y=12

8.1.4. Доступ к элементу массива с использованием указателя

Получение доступа к элементу массива в памяти посредством доступа к элементу указателя.

char* charPointer = stackalloc char[123];

for (int i = 65; i < 123; i++)

charPointer[i] = (char)i; // Доступ к элементу массива

Примечание. Выражение charPointer[i] эквивалентно выражению *(charPointer + i) , поэтому, используя любое из них можно получить одинаковый результат.

Пример 8.4. Назначение 123-х областей памяти массиву символов charPointer. Массив используется для отображения букв нижнего и верхнего регистра в двух циклах for.

// Компилировать с /unsafe

class Pointers

{ unsafe static void Main()

{ char* charPointer = stackalloc char[123];

for (int i = 65; i < 123; i++) charPointer[i] = (char)i;

// Вывод букв верхнего регистра:

System.Console.Write("Буквы верхнего регистра: ");

for (int i = 65; i < 91; i++)

System.Console.Write(charPointer[i]);

System.Console.WriteLine();

// Вывод букв нижнего регистра:

System.Console.Write("Буквы нижнего регистра: ");

for (int i = 97; i < 123; i++)

System.Console.Write(charPointer[i]);

System.Console.WriteLine();

System.Console.ReadLine();

}

}

/* Вывод:

Буквы верхнего регистра: ABCDEFGHIJKLMNOPQRSTUVWXYZ

Буквы нижнего регистра: abcdefghijklmnopqrstuvwxyz

*/

8.1.5. Операции инкремента и декремента над указателями

Пример 8.5. Перемещение по массиву путем увеличения значения переменной указателя. После выполнения каждого шага отображается содержимое и адрес элемента массива.

// Компилировать с /unsafe

class PointerIncrement

{ unsafe static void Main()

{ int[] numbers = {0,1,2,3,4};

fixed (int* p1 = numbers) // Назначение указателя на массив

{ for (int* p2 = p1; p2 < p1 + numbers.Length; p2++)

System.Console.WriteLine("Значение: {0} @ Адрес: {1}",

*p2, (long)p2);

}

System.Console.ReadLine();

}

}

/* Вывод:

Значение: 0 @ Адрес: 20076952

Значение: 1 @ Адрес: 20076956

Значение: 2 @ Адрес: 20076960

Значение: 3 @ Адрес: 20076964

Значение: 4 @ Адрес: 20076968

*/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]