*(р+0) : 0 *(P+1) : 1 *(р+2) : 2 *(р+3) : 3 *(р+4) : 4
* (р+5) : 5
* (р+6) : 6
* (р+7) : 7 *(р+8): 8
* (р+9) : 9
Как следует из результата выполнения приведенной выше программы, общая форма выражения с указателем
* (ptr + i)
может быть заменена следующим синтаксисом индексирования массива.
ptr[i]
Что касается индексирования указателей, то необходимо иметь в виду следующее. Во-первых, при таком индексировании контроль границ массива не осуществляется. Поэтому указатель может обращаться к элементу вне границ массива. И во-вторых, для указателя не предусмотрено свойство Length, определяющее длину массива. Поэтому, если используется указатель, длина массива зарайее неизвестна.
Указатели и строки
Символьные строки реализованы в 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;
}
}
Эта программа дает следующий результат.
это тест
Многоуровневая непрямая адресация