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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.84
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
#1

Расскажите популярно про ссылки и указатели - C++

04.01.2013, 16:05. Просмотров 5939. Ответов 110
Метки нет (Все метки)

Помогите разобраться со ссылками и указателями на различные объекты. Запутался вообще в них полностью. Когда читаю книгу про них, то вроде все понятно написано, но примеров для меня видимо не достаточно, что бы как то их различать. В итоге начинаю решать задачи и ни чего не выходит.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2013, 16:05
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Расскажите популярно про ссылки и указатели (C++):

Популярно объясните про указатели - C++
Что-то плохо даётся мне тема про указатели. Я хорошо уяснил, что вот так создаётся указатель: int *pointer; Я так же хорошо...

Пояснить про указатели и ссылки - C++
есть переменное и указатель.. Значение нашей переменной случайный адрес, Как менять адрес указателя, таким образом, что бы она стала...

Подскажите хорошую статью про указатели и ссылки - C++
Посоветуйте статью, видео или книгу по указателям и ссылкам в C++, где все доходчиво разъяснено с реальными примерами. Уже много чего...

Расскажите про new и delete в C++ - C++
Есть несколько вопросов: 1) Можно ли перегрузить несколько операторов new в разных пространствах имен, а потом просто писать int *t =...

Расскажите на пальцах про классы - C++
Доброе время суток! (сразу оговорюсь, можете кинуть ссылкой куда мне пойти почитать) Сижу разбираюсь в классах и собственно вопросы:...

Расскажите пожалуйста про флаги - C++
Доброго времени суток. Помогите пожалуйста разобраться с фалагми. Вот код: #include <iostream> #define ID_F 1001 #define ID_D 1002 ...

110
Kastaneda
05.01.2013, 17:56     Расскажите популярно про ссылки и указатели
  #91

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Код с ссылками и с указателями. Найдите 10 отличий?
не, отличия должны быть (но конечно не обязаны). Там, где используется ссылка, скорее всего память под нее даже не будет выделена, а вот под указатель уже будет (в оптимизированом коде указатель может быть тоже выброшен). Сейчас немного занят, чуть позже ассемблер ковырну, покажу, что получилось.

0
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
05.01.2013, 17:57  [ТС] #92
Парни, я рад что у вас завязался диалог, но ветку я создал для решения задач по теме.
0
Croessmah
05.01.2013, 17:58
  #93

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
в оптимизированом коде указатель может быть тоже выброшен
собственно об этом я и толкую - все зависит от конкретной ситуации.

0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
05.01.2013, 17:58 #94
gomodril, им нужен был только повод , ты его предоставил)
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
05.01.2013, 18:00 #95
Цитата Сообщение от Toshkarik Посмотреть сообщение
В Вашем примере 0 выступает в качестве индекса, а не номера.
А я и идентифицирую элементы только индексом.
0
Croessmah
05.01.2013, 18:06
  #96
 Комментарий модератора 

Если кто хочет высказаться по теме, то высказывайтесь.
Не думаю, что наш спор будет полезен автору темы!
Оффтоп прекращаем
1
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
05.01.2013, 18:24  [ТС] #97
Croessmah, спасибо

Вот теперь я точно запутался.
По заданию нужно создать указатель на массив строк. Но в книге и Интернете не могу найти точное определение массива строк, все как то размыто. Если следовать логике, то массив строк состоит из строк, при этом каждая строка это массив символов. Значит массив строк это двумерный массив символов.
Я на правильном пути?
0
Kastaneda
05.01.2013, 18:40
  #98

Не по теме:

Последний раз поофтоплю - посмотрел ассемблерные результаты (не буду их приводить, опишу словами), код брал из поста Croessmah. Без оптимизации в дебаг режиме создались абсолютно идентичные коды, т.е. память под ссылку была выделена так же, как для указателя (что меня удивило). А вот с оптимизацией результат меня обрадовал - для обоих случаев был создан такой код

Assembler
1
2
xor     eax, eax
retn
для тех, кто не знает ассемблер поясню, создался такой код
C++
1
2
3
4
int main()
{
    return 0;
}
т.е. компилятор смог понять, что в коде происходит что-то совершенно не нужное, и результат ни где не используется и просто выкинул этот код Можно конечно задействовать результат и еще раз глянуть, что получится, но я так предположу - память не под ссылку не под указатель выделена не будет, результат посчитается на регистрах.
Подитожу все вышесказанное - отличие ссылки от указателя видна на уровне языка (в нашем случае С++). А во что это реально будет транслировано знает только компилятор, может разница и будет, а может и не будет, зависит от конкретного случая.

0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,801
Записей в блоге: 3
Завершенные тесты: 1
05.01.2013, 18:43 #99
Цитата Сообщение от gomodril Посмотреть сообщение
Значит массив строк это двумерный массив символов.
Можно и так представить.
А можно, например, как указатель на массив char*
0
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
05.01.2013, 18:51  [ТС] #100
Цитата Сообщение от Croessmah Посмотреть сообщение
Можно и так представить.
А можно, например, как указатель на массив char*
Тогда я правильно наверное создавал ранее код:

C++
1
2
3
4
char* m_str_1[] = {"Kisa1",
        "Kisa2",
        "Kisa3"};
std::cout << "Указатель на массив строк 'm_str_1' = " << m_str_1 << endl;
Подкорректируйте как правильно будет, а то уже каша в голове.
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
05.01.2013, 18:55 #101
Цитата Сообщение от gomodril Посмотреть сообщение
По заданию нужно создать указатель на массив строк. Но в книге и Интернете не могу найти точное определение массива строк, все как то размыто.
Твоя проблема в том, что стандарт c++ допускает два вида строк: нультерминальные строки и строки-объекты. Определись с видом, если нужны объекты, то с их классом.
0
Croessmah
Ушел
13783 / 8033 / 928
Регистрация: 27.09.2012
Сообщений: 19,801
Записей в блоге: 3
Завершенные тесты: 1
05.01.2013, 18:57 #102

Не по теме:

Цитата Сообщение от gomodril Посмотреть сообщение
Подкорректируйте как правильно будет, а то уже каша в голове.
тогда лучше передохните. Не стоит пытаться "запихнуть" в себя как можно больше. Лучше обдумать то, что уже прочитали.


Цитата Сообщение от gomodril Посмотреть сообщение
Тогда я правильно наверное создавал ранее код:
можно так:
C++
1
2
3
4
5
6
7
8
#include <iostream>
int main(){
    const int n=3;
    char * arr[n]={"My string","My text","My number?o_O"};  
    for(int i=0;i<3;++i)
        std::cout<<*(arr+i)<<std::endl;
    return 0;
}
0
taras atavin
3888 / 1762 / 92
Регистрация: 24.11.2009
Сообщений: 27,565
05.01.2013, 19:00 #103
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
std::ostream               &operator<< (std::ostream    &Stream    ,
                                        TParseXSMResult  CodeResult)
{
        int             ErrorMaskIndex;
        TParseXSMResult ErrorMask;
        TParseXSMResult LastMask;
        TParseXSMResult FirstMask;
        TParseXSMResult Error;
        bool            First;
        bool            Last;
 static char            Out[2][2][5][32]={{{"empty buffer, ", "no xsm tag, ", "no version tag, ", "unsupported version, ", "parse error, "}, {"empty buffer.", "no xsm tag.", "no version tag.", "unsupported version.", "parse error."}}, {{"Empty buffer, ", "No xsm tag, ", "No version tag, ", "Unsupported version, ", "Parse error, "}, {"Empty buffer.", "No xsm tag.", "No version tag.", "Unsupported version.", "Parse error."}}};
 if (((unsigned int)CodeResult)>0x1F)
 {
  Stream<<"Unknown result code."<<std::endl;
  return Stream;
 }
 if (CodeResult==TPXSMRNoError)
 {
  Stream<<"No error."<<std::endl;
  return Stream;
 }
 for (ErrorMaskIndex=0; ErrorMaskIndex<5; ++ErrorMaskIndex)
 {
  ErrorMask=(TParseXSMResult)(0x01<<ErrorMaskIndex);
  Error    =(TParseXSMResult)(CodeResult&ErrorMask);
  FirstMask=(TParseXSMResult)(((unsigned int)ErrorMask)-1);
  LastMask =(TParseXSMResult)(0x1F^(FirstMask|ErrorMask));
  First=(CodeResult&FirstMask)==0x00;
  Last =(CodeResult&LastMask )==0x00;
  if (Error!=0x00)
  {
   Stream<<Out[First][Last][ErrorMaskIndex];
  }
 }
 Stream<<std::endl;
 return Stream;
}
Out - массив массивов массивов строк, он же массив массивов массивов массивов символов.
0
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 140
05.01.2013, 19:06  [ТС] #104
Цитата Сообщение от taras atavin Посмотреть сообщение
Твоя проблема в том, что стандарт c++ допускает два вида строк: нультерминальные строки и строки-объекты. Определись с видом, если нужны объекты, то с их классом.
Я интуитивно понимаю о чем вы говорите, но пока не знаю что мне нужно. Т.к. я прочитал только главу 5, а в книге их 25 плюс приложения, то я только в самом начале
По всей видимости мне нужны нультерминальные строки, а строки-объекты это уже наверное контейнеры vector, string и map, до них я еще не дошел и соответственно задание их использования пока не касается. Текст задания я написал ранее, оттуда и следует что мне нужно.
0
Kastaneda
05.01.2013, 19:12     Расскажите популярно про ссылки и указатели
  #105

Не по теме:

И еще самый самый последний оффтоп
По поводу спора - первый элемент или нулевой. В стандарте везде употребляется словосочетание first element, например вот

4.2 Array-to-pointer conversion
1 An lvalue or rvalue of type “array of N T” or “array of unknown bound of T” can be converted to a prvalue
of type “pointer to T”. The result is a pointer to the first element of the array
так что "нулевого" элемента не существует.

1
05.01.2013, 19:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2013, 19:12
Привет! Вот еще темы с ответами:

Расскажите про IDE Intel Parallel Studio XE 2015 - C++
Реклама на сайте Intel Parallel Studio XE 2015 написано хорошо, а тех кто пользовался стоит ли установить себе? Добавлено через...

Расскажите про "тру" метод парсинга строки - C++
Опять Добрый день!))) Ой как я ошибался говоря что с парсингом не будет проблем((( Код void GetDirList(const char *Target) { ...

Ссылки и указатели - C++
Добрый день. Возможно было. В чем существенная разница между передачей данных в функцию по ссылке или указателю. В каких случаях вы бы...

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


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

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

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