Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774

Почему передача по ссылке не работает, только по указателю?

05.08.2015, 21:16. Показов 6402. Ответов 102
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include<windows.h>
#include<ctime>
using namespace std;
void input(int*,int);
int main()
{
srand(time(0));
const int n=10;
int arr[n];
input(arr,n);
return 0;
}
void input(int arr[],int k){
    for(int i=0;i<k;i++){
    arr[i]=rand()%2;
    cout<<" "<<arr[i];
}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.08.2015, 21:16
Ответы с готовыми решениями:

Передача по указателю и по ссылке
Всем привет! Есть функция, в которую передается ссылка: void Compare(int &amp;p) { int * str = p;// здесь ошибка нельзя...

Передача по ссылке или указателю?
В каких случаях лучше передавать в функцию ссылки, а в каких указатели?

Передача по ссылке или по указателю
Класс А здесь минимальный в реальности у него много переменных. Как лучше поступить в таком случае? Удобнее выпольнить передачу по ссылке,...

102
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.08.2015, 22:04
Лучший ответ Сообщение было отмечено anti-k как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от tnk500 Посмотреть сообщение
передача по ссылке массива, что ли? Ссылка - псевдоним для переменной, а при работе с массивом нужен указатель
нафиг не нужен.
ссылки вполне достаточно:

http://rextester.com/HRTET27749

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include<ctime>
using namespace std;
 
template<typename T, size_t N>
void input(T (&a)[N])
{
    for(auto&& i: a)
        i = rand()%2,
        cout<<" "<<i;
    cout<<'\n';
}
 
int main()
{
    srand(time(0));
    
    int arr[10];
    
    input(arr);
}
Цитата Сообщение от anti-k Посмотреть сообщение
И если можно обясните как дело обстоит с матрицей в таких случаях.
да все аналогично:

http://rextester.com/SHMPTU54182

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
#include <iostream>
#include<ctime>
using namespace std;
 
template<typename T, size_t N>
void input(T (&a)[N])
{
    for(auto&& i: a)
        i = rand()%2,
        cout<<" "<<i;
    cout<<'\n';
}
 
template<typename T, size_t Y, size_t X>
void view_matrix(T (&a)[Y][X])
{
    cout<<"matrix["<<Y<<"]["<<X<<"] = {\n";
        for(size_t y=0; y<Y; ++y)
        {
            cout<<"    ";
            for(size_t x=0; x<X; ++x)
                cout<< a[y][x]<<", ";
            
            cout<<'\n';
        }
    cout<<"}\n";
}
 
 
int main()
{
    srand(time(0));
    
    int arr[10];
    input(arr);
    
    int matrix[3][2] = { {1,2}, {3,4}, {5,6} } ;
    view_matrix(matrix);
}
2
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.08.2015, 22:08
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Зачем k? ^^
Писал второпях, главное было показать как передать массив по ссылке. k конечно же не нужна.

Цитата Сообщение от anti-k Посмотреть сообщение
castaway, а в случае с думерным массивом принцып тот же?
Да. Пример постом выше.

Цитата Сообщение от anti-k Посмотреть сообщение
и почему arr[10][2] == arr[12]? а не 20??
Боюсь что не понял вопроса.
1
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
05.08.2015, 22:14
Цитата Сообщение от anti-k Посмотреть сообщение
kuza84, Дело в том что нужно понимать как работать.
если теорию понимать то Ассемблер желателен, не понимаешь, посмотрел там код на Ассемблере, а так на практике средствами языка экспериментируешь.
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
05.08.2015, 22:15  [ТС]
castaway, Я, наверное, слишком деревянный но arr[10][2] это 20 ячеек в массиве а не 12
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.08.2015, 22:17
Цитата Сообщение от anti-k Посмотреть сообщение
но arr[10][2] это 20 ячеек в массиве а не 12
Всё верное. Это 20 элементов.
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
05.08.2015, 22:20  [ТС]
hoggy, вот эту строчечку немножечко поподробней пожалуйсто for(auto&& i: a)

Добавлено через 57 секунд
castaway, таак. В таком случае почему arr[10][2]==arr[12]?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
05.08.2015, 22:27
я ж объяснил ...

объявляем массив

int arr[2][3];

Смотрим на адресс arr 0x0000010. У елемента arr[0][1] - 0x0000014, и так далее. Память последовательно. Если обратится arr[1][2] == ( arr + 1*widthMAx)+ 2, где widthMax = 3; получается 0x0000010 + 1*3*4байта + 2*4байта = 0x0000030. Если через arr[5] == ( arr + 5*4байта) = 0х0000030. Это особеность какую надо знать. Так как память последовательно и статические массивы не определяют stackoverflow - гавнокодим)))
1
117 / 121 / 42
Регистрация: 25.08.2012
Сообщений: 1,294
05.08.2015, 22:29
hoggy, черт, давно пора 11 и 14 осваивать :S
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.08.2015, 22:32
Цитата Сообщение от anti-k Посмотреть сообщение
В таком случае почему arr[10][2]==arr[12]?
А это откуда?
1
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
05.08.2015, 22:34
Лучший ответ Сообщение было отмечено anti-k как решение

Решение

Цитата Сообщение от castaway Посмотреть сообщение
А это откуда?
я тут учу гавнокодить ))) Осталось объяснить про
C++
1
char t = 3["Hello World"];
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
05.08.2015, 22:36  [ТС]
rikimaru2013, а как посмотреть адресс? Прошу простить за тупые вопроссы
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
05.08.2015, 22:39
Цитата Сообщение от anti-k Посмотреть сообщение
а как посмотреть адресс? Прошу простить за тупые вопроссы
поместить в указатель адрес через &, а потом посмотреть через cin
2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
05.08.2015, 22:39
https://www.cyberforum.ru/cpp-... 62479.html
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
05.08.2015, 22:43  [ТС]
rikimaru2013, У меня Dev. К стати сегодня купил новый ноут. Поставил Dev, ryjgjxrf f11 команда компиляции не отзывается, подскажите почему??

Добавлено через 1 минуту
kuza84, нарисуйте пример пожалуйсто что бы понятней было
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
05.08.2015, 22:50
Цитата Сообщение от anti-k Посмотреть сообщение
kuza84, нарисуйте пример пожалуйсто что бы понятней было
C++
1
2
3
4
int a=0;
int *p;
p=&a;
cout<<p;
типа так
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.08.2015, 23:07
Цитата Сообщение от anti-k Посмотреть сообщение
for(auto&& i: a)
цикл по всем элементам коллекции а,
где i - очередной элемент коллекции.

в качестве "коллекции" могут быть обычные массивы,
или std-compatible контейнеры.
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
05.08.2015, 23:20  [ТС]
kuza84, очень наглядный примерчик.
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
using namespace std;
int main(){
    int n=10;
int arr[n];
int *p;
for(int i=0;i<n;i++){
p=&arr[i];
cout<<" "<<p;
}
    return 0;
}
на каком языке описаны эти адреса?

Добавлено через 6 минут
kuza84, выдает последовательность +4; это связано с тем что int 4 бита?
0
24 / 24 / 7
Регистрация: 25.04.2013
Сообщений: 195
06.08.2015, 02:05
Цитата Сообщение от anti-k Посмотреть сообщение
kuza84, выдает последовательность +4; это связано с тем что int 4 бита?
так точно!

Добавлено через 4 минуты
Цитата Сообщение от anti-k Посмотреть сообщение
на каком языке описаны эти адреса?
0х******** это число в 16-тиричной системе исчисления
0
Заблокирован
06.08.2015, 08:00
Цитата Сообщение от castaway Посмотреть сообщение
Вроде всё верно.
Код C++Выделить код
1
*(*(a + x) + y)
- приношу свои извинения, я не разобрался и думал речь идёт об одномерном массиве, который хотим представить двумерным, вот и пришла мысли о такой конструкции
C++
1
2
3
4
int * MyMatrix::operator[](size_t row){
      return ptr + n_in_row*row;
}
int p = matrix[y][x];

Не по теме:

Не люблю настоящие двумерные массивы (из за массива ссылок) и считаю их злом, в одном блоке памяти делать правильней

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
06.08.2015, 08:37
Цитата Сообщение от ОгУрЕц Посмотреть сообщение
Не люблю настоящие двумерные массивы (из за массива ссылок) и считаю их злом, в одном блоке памяти делать правильней

Не по теме:

двухмерные массивы и есть "один блок памяти".
и казалось бы, причем тут ссылки?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.08.2015, 08:37

Передача аргументов в функцию по ссылке и указателю
Чем отличается передача по ссылке от передачи по указателю аргументов в функцию?

Передача в функцию по ссылке или указателю
Гуру C++, как предпочтительнее делать?:) void f1(int &amp;a) { a = 5; } void f2(int * a) {

Передача std::vector в конструктор[по ссылке\указателю ?]
Доброго времени суток. Есть такой интерфейс класса: class HH_model_class { private: std::vector&lt;double&gt; parameters; ...

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

Передача параметров функции по значению, ссылке и указателю
Вычислить F=f(a)-5f^3(sin(b/2))+1/f(1+c^4), де f(x)=3x^2-2x^2+7, при a=5.08, b=-0.65, c=3.87 Добавлено через 45 минут #include...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru