Небезопасный код с использованием указателей (операции с массивами) - C#
Формулировка задачи:
Задан стековый массив А(N). Получить из него массив В(M), содержащий элементы массива А, кратные двум.
Помогите переделать код в небезопасный с использованием указателей.
вот код
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.Write("Введите размер матрицы n: "); int n = Convert.ToInt32(Console.ReadLine()); int[] A = new int[n]; Random rand = new Random(); for (int i = 0; i < n; i++) { A[i]=rand.Next(0,10); Console.Write(A[i]); } Console.WriteLine(); int[] B = new int[1]; int k = 0; for (int i = 1; i < n; i++) { if (A[i] % 2 == 0) { B[k] =A[i]; k++; Array.Resize(ref B, k + 1); } } for (int i = 0; i < k; i++) Console.Write(B[i] + " "); } } }
Решение задачи: «Небезопасный код с использованием указателей (операции с массивами)»
textual
Листинг программы
using System; using System.Runtime.InteropServices; namespace ConsoleApplication30 { class Program { unsafe static void Main ( string[] args ) { int srcArrSize, endArrSize; int mod2 = 0; Random rand = new Random(); Console.Write( "Введите размер матрицы n: " ); srcArrSize = Convert.ToInt32( Console.ReadLine() ); int* srcArr = (int*)Marshal.AllocHGlobal( srcArrSize * sizeof( int ) ); Console.Write( "Исходный массив:\t" ); for ( int i = 0; i < srcArrSize; ++i ) { srcArr[i] = rand.Next( 0, 10 ); if ( srcArr[i] % 2 == 0 ) ++mod2; Console.Write( srcArr[i] + " " ); } Console.WriteLine(); if ( mod2 == 0 ) { Marshal.FreeHGlobal( (IntPtr)srcArr ); Console.WriteLine( "Нет элементов кратных 2." ); Console.ReadKey(); return; } endArrSize = mod2; mod2 = 0; int* endArr = (int*)Marshal.AllocHGlobal( endArrSize * sizeof( int ) ); int* temp = srcArr; while ( mod2 != endArrSize ) { if ( *temp % 2 == 0 ) endArr[mod2++] = *temp; temp++; } Console.Write( "Элементы кратные 2:\t" ); for ( int i = 0; i < endArrSize; ++i ) Console.Write( endArr[i] + " " ); Marshal.FreeHGlobal( (IntPtr)srcArr ); Marshal.FreeHGlobal( (IntPtr)endArr ); Console.WriteLine(); Console.ReadKey(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д