4 / 3 / 1
Регистрация: 18.11.2018
Сообщений: 39
1

Создать массив указателей на одномерный массив и через указатели присвоить массиву значения

20.04.2019, 16:24. Показов 3035. Ответов 6

Не могу понять как работают указатели.
Объявляю массив, делаю на него указатель. Циклом с клавиатуры заполняю массив. После окончания цикла все элементы массива равны 0, вне зависимости от введённых значений. Как правильно через указатели заполнить массив?
P.S. В настройках проекта небезопасный код разрешил
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int answ = 0;
    while (!(answ == 1 || answ == 2))
    {
        Console.Clear();
        Console.WriteLine("Ввыберите пункт:");
        Console.WriteLine("1) Заполнить массив");
        Console.WriteLine("2) Выйти");
        Console.Write(">");
        int.TryParse(Console.ReadLine(), out int result);
        answ = result;
    }
    switch (answ)
    {
        case 1:
            // объявление одномерного массива
            int[] array = new int[9];
            unsafe
            {
                // указатель на массив
                int* linkedArray = stackalloc int[array.Length];
                int* index = linkedArray;
 
                for (int i = 0; i < array.Length; i++)
                {
                    int result = 0;
                    while (true)
                    {
                        Console.Write($"Элемент №{i} = ");
                            if (int.TryParse(Console.ReadLine(), out result))
                            break;
                        else Console.WriteLine("Неверный формат ввода! Ожидалось целое число.");
                    }
                    //задать адресу в памяти значение
                    *index = result;
                    index++;
                }
            }
            Console.WriteLine("Нажмине любую клавишу чтобы выйти из консоли...");
            Console.ReadKey();
 
            break;
 
        case 2:
            Environment.Exit(0);
            break;
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2019, 16:24
Ответы с готовыми решениями:

Надо присвоить значения массива а массиву b с помощю функции, и указателей
Надо присвоить значения массива а массиву b с помощю функции, и указателей... Я написал, но не...

Вывести одномерный массив из случайных чисел (сделать через указатели)
Добрый вечер всем. Необходимо вывести одномерный массив из случайных чисел, НО надо сделать через...

По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение TRUE
По двумерному массиву массиву А получить одномерный массив В, присвоив его k-му элементу значение...

Создать массив указателей базового класса и присвоить ему адреса каждого из екземпляров класса
Всем привет. Есть условие задачи: Дан базовый класс Base у которого есть метод my_name, метод...

6
262 / 223 / 108
Регистрация: 09.12.2015
Сообщений: 652
20.04.2019, 16:44 2
Цитата Сообщение от Palm_Tree Посмотреть сообщение
Объявляю массив, делаю на него указатель.
Вы в вашем коде создаёте массив, но указатель на него не берёте.
Вместо этого вы берёте указатель на массив на стеке и в него записываете числа.
0
4 / 3 / 1
Регистрация: 18.11.2018
Сообщений: 39
20.04.2019, 16:48  [ТС] 3
как правильно тогда сделать?
0
262 / 223 / 108
Регистрация: 09.12.2015
Сообщений: 652
20.04.2019, 16:49 4
Цитата Сообщение от Palm_Tree Посмотреть сообщение
как правильно тогда сделать?
Что именно?
0
4 / 3 / 1
Регистрация: 18.11.2018
Сообщений: 39
20.04.2019, 16:54  [ТС] 5
Цитата Сообщение от Fleder Посмотреть сообщение
Что именно?
как создать указатель на массив?
как заполнить его данными через указатели?
Кликните здесь для просмотра всего текста
извиняюсь, если вопросы глупые, что-то совсем не догоняю просто
0
262 / 223 / 108
Регистрация: 09.12.2015
Сообщений: 652
20.04.2019, 17:10 6
Лучший ответ Сообщение было отмечено Palm_Tree как решение

Решение

Цитата Сообщение от Palm_Tree Посмотреть сообщение
как создать указатель на массив?
Указатель на массив в языке C# обычно берут в следующих случаях:
  1. При организации взаимодействия с неуправляемым кодом.
  2. При попытке оптимизации быстродействия кода (за счёт скипанья проверок выхода за пределы массива).
  3. При попытке "наивного" портирования неуправляемого кода.

Если же интерес просто академический, то указатель можно взять так:
C#
1
2
3
4
5
6
 // объявление одномерного массива
int[] array = new int[9];
fixed(int* ptr = array)
{
 
}
Или так:
C#
1
2
3
4
5
6
 // объявление одномерного массива
int[] array = new int[9];
GCHandle gch = GCHandle.Alloc(array, GCHandleType.Pinned);
int* ptr = (int*)gch.AddrOfPinnedObject();
...
gch.Free();
1
4 / 3 / 1
Регистрация: 18.11.2018
Сообщений: 39
20.04.2019, 17:20  [ТС] 7
Большое спасибо!
Если нужно кому, то вот
C#
1
2
3
4
5
fixed (int* ptr = array)
{
    for (int i = 0; i < array.Length; i++)
        *(ptr+i) = result;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2019, 17:20
Помогаю со студенческими работами здесь

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;//...

Задачка. массив указателей на одномерный массив
Привет всем. Помогите, пожалуйста. Два дня мучился, писал, оказалось, что писал совсем не то, что...

Как создать массив объектов типа Shar и присвоить ему значения
Добрый вечер! Подскажите, не могу разобраться... Хочу создать массив объектов типа Shar, но при...

Как создать меню без операторов if и switch через массив указателей на функцию?
к примеру простые арифметические действия (+, -)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru