Указатели р и р2 содержат один и тот же адрес

Как следует из приведенного выше результата, выражения &nums[0]

И

nums

оказываются одинаковыми. Но поскольку вторая форма более лаконична, то она чаще используется в программировании, когда требуется указатель на начало массива.

Индексирование указателей

Когда указатель обращается к массиву, его можно индексировать как сам массив. Такой синтаксис служит более удобной в некоторых случаях альтернативой арифметическим операциям над указателями. Рассмотрим следующий пример программы.

// Проиндексировать указатель как массив.

using System;

class PtrlndexDemo {

unsafe static void Main() { int[] nums = new int [10];

// Проиндексировать указатель.

Console.WriteLine('Индексирование указателя как массива.'); fixed (int* p = nums) { for(int i=0; i < 10; i++)

p[i] = i; // индексировать указатель как массив

forjint i=0; i < 10; i++)

Console.WriteLine('p[{0}]: {1} ', i, p[i]);

}

// Использовать арифметические операции над указателями.

Console.WriteLine('ХпПрименение арифметических ' +

'операций над указателями.'); fixed (int* р = nums) { for(int i=0; i < 10; i++)

* (p+i) = i; // использовать арифметическую операцию над указателем

for(int i=0; i < 10; i++)

Console.WriteLine('*(p+{0}): {1} ', i, *(p+i));

}

}

}

Ниже приведен результат выполнения этой программы.

Индексирование указателя как массива.

Р[9] : 9

Применение арифметических операций над указателями.

*(р+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* р = str) { // ...

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату