Символьные строки реализованы в C# в вид^объектов. Тем не менее отдельные символы в строке могут быть доступны по указателю. Для этого указателю типа char* присваивается адрес начала символьной строки в следующем операторе с модификатором fixed.
fixed(char*
После выполнения оператора с модификатором fixed переменная
Ниже приведена программа, демонстрирующая доступ к символьной строке по указателю типа char*.
// Использовать модификатор fixed для получения // указателя на начало строки.
using System;
class FixedString {
unsafe static void Main() { string str = "это тест";
// Получить указатель р на начало строки str. fixed(char* р = str) {
// Вывести содержимое строки str по указателю р. for(int i=0; p[i] != 0; i++)
Console.Write(p[i]);
Console.WriteLine();
}
}
Эта программа дает следующий результат.
это тест
Многоуровневая непрямая адресация
Один указатель может указывать на другой, а тот, свою очередь, — на целевое значение. Это так называемая
Указатель Переменная
адрес -► значение
Одноуровневая непрямая адресация
Указатель Указатель Переменная
адрес -► адрес -► значение
Многоуровневая непрямая адресация Рис. 20.1. Одно- и многоуровневая непрямая адресация
Многоуровневая непрямая адресация может быть продолжена до любого предела, но потребность более чем в двух уровнях адресации по указателям возникает крайне редко. На самом деле чрезмерная непрямая адресация очень трудно прослеживается и чревата ошибками.