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

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

Войти
Регистрация
Восстановить пароль
 
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
#1

Указатели - C++

14.01.2011, 23:31. Просмотров 508. Ответов 6
Метки нет (Все метки)

char * b; - я объявил, что b является указателем на char.
теперь, чтобы присвоить адрес указателю, то нужно сделать следующее
C++
1
2
char a = 'a';
b = &a;
если я хочу, чтобы моя функция возвращала указатель, то нужно написать вот такую функцию(не обращайте внимание, что функция бредовая, главное сама идея)
C++
1
2
3
4
char * f(char a)
{
    return &a;
}
Всё верно?

Но в книге я встречаю следующую функцию, а автор говорит, что функция возвращает указатель, хотя использует символ получения адреса
C++
1
2
3
4
char & f(char * b, int c)
{
    return b[c]
}
Но и это не все, дальше автор использует эту функцию следующим образом
a = f("wight", 0);
a = 'r'; // даже, если предположить, что a это указатель, то почему не используется символ * для разыименования?
в результате автор говорит, что получается right.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 23:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели (C++):

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Через указатели на указатели посчитать сумму двух чисел и записать в третье - C++
1. Через указатели на указатели посчитать сумму двух чисел и записать в третье. 2. Написать примитивный калькулятор, пользуясь только...

Есть три переменные. Используя указатели на указатели, поменять значение максимальной и минимальной переменной - C++
Мой код. #include <iostream> #include <stdlib.h> #include<iomanip> using namespace std; void min_max(int*pa, int*pb,...

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

Отсортировать массив и вывести на экран (массивы и указатели на указатели) - C++
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F студента. Отсортировать массив S по...

Указатели на слонов или А зачем нужны указатели? - C++
Знаю что таких вопросов было уйма, но я так и не нашел ответа на свой вопрос. Для чего нужны указатели? Что такое указатели я знаю, это...

6
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
15.01.2011, 01:27 #2
Цитата Сообщение от FanAizu Посмотреть сообщение
Но в книге я встречаю следующую функцию, а автор говорит, что функция возвращает указатель, хотя использует символ получения адреса
Это не указатель, а ссылка.
Цитата Сообщение от FanAizu Посмотреть сообщение
Но и это не все, дальше автор использует эту функцию следующим образом
a = f("wight", 0);
a = 'r'; // даже, если предположить, что a это указатель, то почему не используется символ * для разыименования?
в результате автор говорит, что получается right.
Что за книга если не секрет?
0
FanAizu
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 31
15.01.2011, 02:20  [ТС] #3
Да, уже прочитал про ссылки. небольшой вопрос по поводу ссылок и указателей. когда функция возвращает указатель, то нужно в операторе return использовать оператор получения адреса & ? А книга Язык программирования С++ [Стивен Прата]
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.01.2011, 07:25 #4
FanAizu, да. И, на всякий случай, добавлю - возвращать указатели и ссылки на временные объекты - нельзя!
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.01.2011, 07:30 #5
Цитата Сообщение от Nameless One Посмотреть сообщение
да
Не всегда. Адрес чего требуется вернуть? Адрес статического данного? Или динамического? В первом случае для возврата указателя нужен оператор взятия адреса &, во втором для возврата ссылки противоположный ему оператор *.

Добавлено через 1 минуту
Цитата Сообщение от Nameless One Посмотреть сообщение
И, на всякий случай, добавлю - возвращать указатели и ссылки на временные объекты - нельзя!
А вот с этим согласен. И не только я, в литературе это тоже разбирается как ошибка.
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
15.01.2011, 07:30 #6
Цитата Сообщение от taras atavin Посмотреть сообщение
Во-первых, при возврате ссылки этот оператор не допускается
Читать надо внимательно:
Цитата Сообщение от FanAizu Посмотреть сообщение
когда функция возвращает указатель
0
taras atavin
3570 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.01.2011, 07:32 #7
Исправил, но есть же ещё возврат указателя на динамическое данное, а в этом случае функция и так имеет готовый указатель.
0
15.01.2011, 07:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2011, 07:32
Привет! Вот еще темы с ответами:

Написать программу сортировки через указатели на указатели - C++
Вот моя программа #include <iostream> #include <conio.h> #include <string> using namespace std; //Сортировка "пузырьком". ...

Используются ли на практике указатели на указатели объектов? - C++
Имеются ввиду указатели именно на объекты, а не динамические массивы. Например такой: Object** obj; А как насчёт такого: Object***...

Указатели на массивы. Указатели и функции - C++
Вот задача: Даны два массива : А и B. Необходимо создать третий массив, в котором нужно собрать: -Элементы обоих массивов; -Общие...

Константные указатели и указатели на константу - C++
Чем они, собственно говоря, отличаются? Поясните, пожалуйста. Не знаю, как так получилось, что в разных источниках - разные...


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

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

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