Символьные строки реализованы в C# в вид^объектов. Тем не менее отдельные символы в строке могут быть доступны по указателю. Для этого указателю типа char* присваивается адрес начала символьной строки в следующем операторе с модификатором fixed.

fixed(char*р = str){ // ...

После выполнения оператора с модификатором fixed переменнаярбудет указывать на начало массива символов, составляющих строку. Этот массив оканчивается символом конца строки, т.е. нулевым символом. Поэтому данное обстоятельство можно использовать для проверки конца массива. В C/C++ строки реализуются в виде массивов, оканчивающихся символом конца строки, а следовательно, получив указатель типа char* на строку, ею можно манипулировать таким же образом, как и в C/C++.

Ниже приведена программа, демонстрирующая доступ к символьной строке по указателю типа 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. Как видите, значением обычного указателя является адрес переменной, содержащей требуемое значение. Если же применяется указатель на указатель, то первый из них содержит адрес второго, указывающего на переменную, содержащую требуемое значение.

Указатель    Переменная

адрес -► значение

Одноуровневая непрямая адресация

Указатель    Указатель    Переменная

адрес -► адрес -► значение

Многоуровневая непрямая адресация Рис. 20.1. Одно- и многоуровневая непрямая адресация

Многоуровневая непрямая адресация может быть продолжена до любого предела, но потребность более чем в двух уровнях адресации по указателям возникает крайне редко. На самом деле чрезмерная непрямая адресация очень трудно прослеживается и чревата ошибками.

Перейти на страницу:

Похожие книги