Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 102, средняя оценка - 4.97
xKirillx
1 / 1 / 0
Регистрация: 01.03.2011
Сообщений: 11
#1

Ссылки и указатели - C++

01.03.2011, 12:10. Просмотров 13118. Ответов 54
Метки нет (Все метки)

Добрый день.
Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы что рекоммендовали. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.03.2011, 12:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ссылки и указатели (C++):

Указатели и ссылки - C++
Экспериментируя с указателями пришел к вот таким выводам: int a; //переменная int *b; //указатель int &c = a //ссылка на <a> ...

Ссылки, указатели - C++
Доброго времени. Как, используя ссылки, указатели и, возможно, другие приемы сделать что-то вроде этого?: int a = 1; int b = 2; ...

Указатели и Ссылки - C++
извеняюсь,но никак не могу понять. int sum(int* inLeft, int* inRight) { if(inLeft == inRight) return *inLeft; ...

Указатели и ссылки - C++
Допустим, что есть функция, в которую мы кидаем массив по указателю и кол-ву элементов. void printArray(int *arr, int elements) ...

Ссылки и указатели - C++
Всем привет. Совсем запутался с ссылками и указателями. Помогите решать задачку: Функция принимает два аргумента, число с плавающей...

Указатели и ссылки [С++] - C++
Всем привет. я тут программу делаю. Цель: определить,принадлежит ли точка заданному промежутку(а точнее лежит внутри или снаружи фигуры)....

54
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
15.07.2011, 17:46 #31
Evg, странно. Ты спрашиваешь что неверно с МОЕЙ Точки зрения. А опровергаешь её с точки зрения создателей компилятора.
...Так-то мне понятны причины, по которым это компилится. Понятны но неубедительны.
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
15.07.2011, 17:48 #32
Цитата Сообщение от kravam Посмотреть сообщение
Evg, странно. Ты спрашиваешь что неверно с МОЕЙ Точки зрения. А опровергаешь её с точки зрения создателей компилятора.
...Так-то мне понятны причины, по которым это компилится. Понятны но неубедительны.
Да я вроде бы ничего не спрашивал и ничего не опровергал... Во всяком случае, я так и не понял, о чём ты
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
15.07.2011, 17:54 #33
Evg, ОК
Тогда я так спрошу: тебе непонятно недоумение человека, который считает, что не должно компилиться присваивание указателю на функцию, не принимающую аргументов, адреса функции, принимающей два аргумента?
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.07.2011, 18:00 #34
Цитата Сообщение от kravam Посмотреть сообщение
тебе непонятно недоумение человека, который считает, что не должно компилиться присваивание указателю на функцию, не принимающую аргументов, адреса функции, принимающей два аргумента?
Мне непонятно. Ибо такое присваивание и не будет компилироваться. А вот присваивание с предварительным приведением будет. Потому что производители дрелей производят их для строительных работ и не несут ответа за какого-то чудака, который этой дрелью просверлит себе голову.
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
15.07.2011, 18:02 #35
Цитата Сообщение от silent_1991 Посмотреть сообщение
Ибо такое присваивание и не будет компилироваться.
компилится, шеф
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
15.07.2011, 18:03 #36
Цитата Сообщение от kravam Посмотреть сообщение
Evg, ОК
Тогда я так спрошу: тебе непонятно недоумение человека, который считает, что не должно компилиться присваивание указателю на функцию, не принимающую аргументов, адреса функции, принимающей два аргумента?
Нет. Недоумения у меня не было. Ты сказал "но вообще вопрос конечно заслуживает удивления", а своим вопросом я попытался выяснить у тебя, почему это заслуживает удивления. Такой код заведомо корректный с точки зрения языка, т.е. компилятор должен его проглотить, не моргнув.
0
silent_1991
Эксперт С++
4987 / 3044 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.07.2011, 18:04 #37
kravam, мне компилятор в ответ на скармливание такого кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
void f(int a, int b)
{
        std::cout << a + b << std::endl;
}
 
int main()
{
    void (*p)();
 
    p = /*(void (*)())*/&f;
    
    (*p)();
 
    return 0;
}
говорит про невозможность преобразования void (*)(int, int) в void (*)(void).
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
15.07.2011, 18:08 #38
Цитата Сообщение от kravam Посмотреть сообщение
компилится, шеф
В Си++ такое НЕ компилится

C++
1
2
3
4
5
6
7
8
extern void func (int, int);
 
int main (void)
{
  void (*p)(void);
  p = &func;
  return 0;
}
потому что справа и слева от присваивания стоят указатели несовместимых типов. Но если поставить операцию преобразования (т.е. 5-ю строку заменить на "p = (void (*)(void)) &func;"), то всё будет нормально
0
silentnuke
Android Programmer
139 / 140 / 5
Регистрация: 08.12.2010
Сообщений: 421
15.07.2011, 18:10 #39
Evg, спасибо, со вторым случае стало хоть более менее понятно.)
я так понял то что я привел класс A к наследнику тут вообще не причем, у нас поля стали доступны уже при создании указателя класса наследника.
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
15.07.2011, 18:12 #40
Цитата Сообщение от silentnuke Посмотреть сообщение
у нас поля стали доступны уже при создании указателя класса наследника
Они стали доступны с точки зрения языка. Но компилятор при этом не знает, выделена под них память, или нет. И это находится в твоей ответственности (потому как ты сделал преобразование типа над указателями)
0
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
15.07.2011, 18:21 #41
Цитата Сообщение от kravam Посмотреть сообщение
компилится, шеф
Не должно! Какой компилятор? Выкиньте его на свалку, он нарушает стандарт.
С преобразованием типа - будет компилиться, без преобразования - не должно.
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
15.07.2011, 18:36 #42
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Не должно! Какой компилятор? Выкиньте его на свалку, он нарушает стандарт
gcc в режиме Си вроде бы как сожрёт это дело
0
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
15.07.2011, 18:41 #43
Насколько помню, в Си не было ссылок...
0
kravam
быдлокодер
1701 / 888 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
15.07.2011, 18:44 #44
ДРузья, я был неправ. Но это бросает тень на меня и только.

Итак, мне нравится когда всё о чём я говорил компилится с преобразованием типов
C++
1
        p=(void(*)())&f;
Это плохо.
0
Evg
Эксперт CАвтор FAQ
18248 / 6373 / 438
Регистрация: 30.03.2009
Сообщений: 17,641
Записей в блоге: 28
15.07.2011, 18:46 #45
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Насколько помню, в Си не было ссылок...
А при чём тут ссылки? Речь идёт о преобразовании типа над указателями на функцию (первый пример из поста #22). Далее в посте #38 я нарисовал пример, отрезавшись от Си++ (чтобы его можно было компилять и на Си, и на Си++). В режиме Си на, к примеру, борландовском компиляторе он не пройдёт компиляцию, а на gcc - пройдёт. Ибо gcc по умолчанию работает в некотором своём расширении, который допускает больше безобразия, нежели стандартный Си
1
15.07.2011, 18:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2011, 18:46
Привет! Вот еще темы с ответами:

Ссылки vs Указатели - C++
Почему ссылки считаются более хорошим средством, чем указатели? Ведь если человек будет использовать сторонние классы, он может не...

Указатели и ссылки - C++
Собственно, не могу до конца осознать как это работает, вот пример из вики(комменты входят в пример) int n = 6; // Объявление...

Ссылки и указатели - C++
Добрый день, не могу понять чем помогают при использовании указатели и ссылки? Есть код на c++ #progma once class well { ...

Указатели и ссылки - C++
Используя вместо самой переменной указатель на нее написать программу в соответствии с заданием: Вычислить y = cos|x3-x2|.


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru