Зачем тут создается указатель p? И что за "странная" операция *p = *p = 1? - C#
Формулировка задачи:
Здравствуйте. Ребят, очень нуждаюсь в помощи, помогите понять. Попался мне на мсдн код, в реализации которого вычисляются 20 чисел Фибоначчи, блок памяти располагается в стеке. Вот код:
и тут посыпались непонятки... Зчаем тут создается указатель p? И что за "странная" операция отличается ли он в техничном плане?
class Test
{
static unsafe void Main()
{
const int arraySize = 20;
int* fib = stackalloc int[arraySize];
int* p = fib;
// The sequence begins with 1, 1.
*p++ = *p++ = 1;
for (int i = 2; i < arraySize; ++i, ++p)
{
// Sum the previous two numbers.
*p = p[-1] + p[-2];
}
for (int i = 0; i < arraySize; ++i)
{
Console.WriteLine(fib[i]);
}
// Keep the console window open in debug mode.
System.Console.WriteLine("Press any key to exit.");
System.Console.ReadKey();
}
}*p++ = *p++ = 1;
? это точно не арифметический инкремент... как это работает??? Если бы передо мной стала задача написать код для вычисления чисел Фибоначчи через указатели, расположив данные в стеке, я бы написал вот такой код: int* fib = stackalloc int[20];
// The sequence begins with 1, 1.
fib[0] = fib[1] = 1;
for (int i = 2; i < 20; ++i)
{
// Sum the previous two numbers.
fib[i] = fib[i-1] + fib[i-2];
}
for (int i = 0; i < 20; ++i)
{
Console.WriteLine(fib[i]);
}
System.Console.ReadKey();Решение задачи: «Зачем тут создается указатель p? И что за "странная" операция *p = *p = 1?»
textual
Листинг программы
int* fib = stackalloc int[arraySize]; *(long*)fib = 4294967297; int* p = fib + 2;