Небезопасный код с использованием указателей (операции с массивами) - 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();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы