Зачем тут создается указатель 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д