Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/43: Рейтинг темы: голосов - 43, средняя оценка - 4.53
 Аватар для fromshadow
5 / 5 / 2
Регистрация: 07.01.2010
Сообщений: 61

Передача массива по ссылке вызывает ошибку

23.11.2010, 01:56. Показов 8192. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Столкнулся с проблемой передачи массивов по ссылке... В самоучителе который изучаю дан пример только с обычными параметрами, который работает. Например:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Point 
{ 
        int xPos; 
        int yPos; 
 
        public Point() 
        { 
                 xPos = yPos = 0; 
        } 
 
        public void SetPosition(int x, int y) 
        { 
                       xPos = x; 
                       yPos = y; 
        } 
 
        public void GetPosition(out int x, out int y) 
        { 
                       x = xPos; 
                       у = yPos;
        }
}
C#
1
2
3
4
Point p;
p=new Point();
int xCurrect,yCurrect;
p.GetPosition(xCurrect,yCurrect);
а про передачу массивов нечего не сказано... Ну я и пробую по аналогу передавать их:

C#
1
2
3
4
5
6
7
public void GetRect(int[] ax, int[] ay, out int sc, out int[] nn)
{
               ax[0]=0;
               ay[0] = 0;
               sc = 1;
               nn[0]=1;   
}
только вот компилятор ругается, мол значения массива не указаны и вообще типа ни фига я не присвоил выходящей переменной nn...
Пробовал найти в инете инфу по данному поводу, но наталкиваюсь только на решение вопроса в С++, что собственно в Шарпе не канает...

Может кто подсказать, как правильно передать в ф-цию массив по ссылке, а еще лучше двухмерный массив..?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.11.2010, 01:56
Ответы с готовыми решениями:

еременная которой нигде нет(не описана) не вызывает ошибку в большом инете, а на локале вызывает ошибку
Совсем я ничего не понимаю. Переменная которой нигде нет(не описана) не вызывает ошибку в большом инете, а на локале вызывает ошибку. ЧТО...

Передача массива по ссылке
Как передать массив по ссылке в функцию? #include <stdio.h> #define STUDENTS 3 #define EXAMS 4 void function1 ( int , int , int...

Передача массива по ссылке
Как правильно передавать двумерный статический массив в мои функции? #include <iostream> #include <time.h> using namespace...

6
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
23.11.2010, 01:59
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Попробуй так:
C#
1
2
3
4
5
6
7
public void GetRect(int[] ax, int[] ay, out int sc, ref int[] nn)
{
               ax[0]=0;
               ay[0] = 0;
               sc = 1;
               nn[0]=1;   
}
Но в данном случае тебе даже модификаторы не нужны, массивы это ссылочный тип, они изначально передаются по ссылке... Если же надо с out, то так:
C#
1
2
3
4
5
6
7
public void GetRect(int[] ax, int[] ay, out int sc, out int[] nn)
{
               ax[0]=0;
               ay[0] = 0;
               sc = 1;
               nn = new int[10];   
}
з.ы. код не проверял...
1
 Аватар для Mikant
1322 / 995 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
23.11.2010, 02:03
в первом примере без ref если написать, например, nn = new int[...] будет крайне плохо... так что...
0
 Аватар для fromshadow
5 / 5 / 2
Регистрация: 07.01.2010
Сообщений: 61
23.11.2010, 02:27  [ТС]
SSTREGG,"Описание параметра с ключевым словом ref используется обычно тогда, когда метод должен с помощью этого параметра не только возвращать значение, но и получать его." Просто у меня не получает, вот я и пробовал через out
В любом случае оба ваших примера работают и схему я понял. Только вот, как двухмерный массив вынуть? Вроде по аналогии с вашим примером, но снова компилятор матерится на недопустимые выражения...
C#
1
2
3
4
5
6
7
8
9
10
11
        public void GetRect(int[] ax, int[] ay, out int sc, out int[][] nn)
        {
            ax[0]=0;
            ay[0] = 0;
            sc = 1;
            nn =         
                  {
                    new int[1], 
                    new int[5]
                  };
         }
Вроде ж такой способ оглашения двухмерного массива правильный
C#
1
2
3
4
5
        static public int[][] NN =            // Массив координат и характеристик сечений
        {
            new int[1],
            new int[MaxN]
        };
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8728 / 3680 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
23.11.2010, 02:31
C#
1
2
3
4
5
6
7
8
9
10
11
        public void GetRect(int[] ax, int[] ay, out int sc, out int[][] nn)
        {
            ax[0]=0;
            ay[0] = 0;
            sc = 1;
            nn = new int[][]        
                  {
                    new int[1], 
                    new int[5]
                  };
         }
Честно, мне лень в 1:30 ночи в этом разбираться Но видимо компилятору требуется явное объявление массива массивов.
1
 Аватар для fromshadow
5 / 5 / 2
Регистрация: 07.01.2010
Сообщений: 61
23.11.2010, 02:43  [ТС]
Да я же и не торопил
Эх, надо было сразу все варианты объявления перепробовать, просто считал что они равносильны...
Большое спасибо, за помощь в столь позднее время, с вопросом разобрался.
0
62 / 51 / 15
Регистрация: 08.07.2010
Сообщений: 119
23.11.2010, 10:29
А зачем париться. Массив итак ссылочный тип. При передаче переменной в метод передается ссылка на массив. out нужен только для тех случаев, когда массив будет инициализироваться внутри метода. А ref используется для значимых типов.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.11.2010, 10:29
Помогаю со студенческими работами здесь

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

Передача массива по ссылке
Здравствуйте. Помню где-то читал что можно передавать массивы по страницам т.е. , к примеру, есть большой двухмерных массив $arr, который...

Передача массива по ссылке
Здравствуйте. Подскажите, как передать массив по ссылке. массив metro имеет значения знач1, знач2,знач3,...,знач4 $pmetro=metro; ...

Передача элемента массива по ссылке
В метод swap пытаюсь передать 2 элемента массива по ссылке, но компилятор пишет, что индексатор не может передаваться как ссылка. Как можно...

Передача массива в функцию по ссылке
Здравствуйте. Есть функция: void f(int &a) { int *p=&a; p=1; } Но почему-то при попытке передать ей массив ругается...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru