68 / 4 / 1
Регистрация: 11.10.2012
Сообщений: 89
|
|
1 | |
В чем отличие char* s от char *s14.07.2016, 09:34. Показов 2512. Ответов 32
Метки нет Все метки)
(
0
|
|
14.07.2016, 09:34 | |
Ответы с готовыми решениями:
32
В чем отличие двумерного массива типа char от массива указателей на char?
В чем разница между char* и char ** Чем отличается const char* от char*? |
27 / 27 / 16
Регистрация: 18.05.2016
Сообщений: 128
|
||||||
14.07.2016, 09:36 | 2 | |||||
laby, ни в чём, можно хоть
0
|
68 / 4 / 1
Регистрация: 11.10.2012
Сообщений: 89
|
|
14.07.2016, 09:38 [ТС] | 3 |
Что-то не верится. Где это написано? Блин вообще запутался, сложный язык.
0
|
27 / 27 / 16
Регистрация: 18.05.2016
Сообщений: 128
|
||||||
14.07.2016, 09:41 | 4 | |||||
laby, ну, если не верится, то можно проверить самостоятельно. Попробуйте создать программу с тремя такими объявлениями и поковыряться с ними.
Добавлено через 22 секунды Можете ещё
0
|
Модератор
![]() 12756 / 10218 / 6142
Регистрация: 18.12.2011
Сообщений: 27,364
|
|||||||||||
14.07.2016, 09:42 | 5 | ||||||||||
Дело вкуса.
В принципе, можно в зависимости от того, где стоит звездочка, говорить: char* str означает, что str является адресом переменной типа char char *str означает, что при разыменавании str получим значение типа char Я рекомендую использовать второй способ, т.к. в первом возможны накладки такого типа
Надо все равно писать
1
|
68 / 4 / 1
Регистрация: 11.10.2012
Сообщений: 89
|
|||||||||||
14.07.2016, 09:45 [ТС] | 6 | ||||||||||
А
и что это?
0
|
27 / 27 / 16
Регистрация: 18.05.2016
Сообщений: 128
|
|
14.07.2016, 09:49 | 7 |
laby, здесь тоже можно писать обоими способами.
0
|
Почетный модератор
![]() 5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
|
|
14.07.2016, 09:50 | 8 |
Вся шутка подобной расстановки знаков проявляется лишь в объявлении нескольких ссылок или указателей с помощью запятой:
C++ int *x, *y, *z C++ int* x,* y,* z C++ int * x, * y, * z C++ int* x, y, z Поэтому и пишут звездочку рядом с переменной, а не с типом, чтобы понимать что она относится не ко всему типу, а только к одной переменной.
1
|
Модератор
![]() 12756 / 10218 / 6142
Регистрация: 18.12.2011
Сообщений: 27,364
|
||||||
14.07.2016, 09:50 | 9 | |||||
Это ссылка на переменную (или синоним переменной).
Так, как Вы написали, писать нельзя: ссылку нужно сразу же инициализировать.
0
|
68 / 4 / 1
Регистрация: 11.10.2012
Сообщений: 89
|
|
14.07.2016, 10:19 [ТС] | 10 |
что еще за ссылка?
Добавлено через 5 минут То есть это не взятие адреса? Добавлено через 5 минут * это объявление указателя и вместе с тем разыменовывание этого указателя & это объявление ссылки и вместе с тем взятие адреса запутали одно и то же для разных вещей. Еще бы понять физически как формируется эта ссылка. Это новое в памяти или то же. Судя по всему то же. А зачем оно нужно. Ну в процедурах понятно для передачи параметра чтоб его можно было там изменить. А вот при описании переменной зачем. И опять же в процедурах можно ведь передавать указатель. Зачем этот &.
0
|
Модератор
![]() 12756 / 10218 / 6142
Регистрация: 18.12.2011
Сообщений: 27,364
|
||||||
14.07.2016, 10:39 | 11 | |||||
Повторюсь - это синоним переменной.
Удобно его использовать при передаче параметров
0
|
4 / 4 / 1
Регистрация: 20.01.2016
Сообщений: 24
|
||||||
14.07.2016, 10:41 | 12 | |||||
laby, чтобы примерно понимал, приведу неправильный пример из реальной жизни. В разговорных языках бывает несколько слов означающие одно и тоже, зовутся такие слова синонимами. Так вот ссылка - почти тот же синоним, только в C, C++ она получает адрес памяти другой переменной. То что будет записано в этой области памяти, то и будешь получать со всех переменных, которые имеют доступ к этой самой области памяти.
Пример такой:
* - указатель на адрес. & - ссылка на адрес. Добавлено через 1 минуту Кстати, как указал zss, то при передаче параметнов это очень хороший способ использовать ссылки, дабы не выделять дополнительно память.
0
|
68 / 4 / 1
Регистрация: 11.10.2012
Сообщений: 89
|
|
14.07.2016, 11:45 [ТС] | 13 |
Ну всё равно сложно. Наверное так:
* - адрес адреса переменной. & - адрес переменной.
0
|
Модератор
![]() 12756 / 10218 / 6142
Регистрация: 18.12.2011
Сообщений: 27,364
|
||||||
14.07.2016, 11:59 | 14 | |||||
Не путайте использование амперсанда в операции взятия адреса и в объявлении ссылки.
Считайте, что это РАЗНЫЕ знаки.
0
|
4 / 4 / 1
Регистрация: 20.01.2016
Сообщений: 24
|
|
14.07.2016, 13:27 | 16 |
zss, не накручивай себя, из-за этого тебе сложно. Мысли проще.
Адрес адреса переменной - такого нету. Если указатель на адрес. Есть ссылка.
0
|
Модератор
![]() 12756 / 10218 / 6142
Регистрация: 18.12.2011
Сообщений: 27,364
|
|
14.07.2016, 13:29 | 17 |
shezu, Про адрес адреса разговора не было.
0
|
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
|
||||||||||||||||
14.07.2016, 13:42 | 18 | |||||||||||||||
Когда пишут
Когда пишут
Можно писать как угодно, как тебе удобно, как тебе кажется логичней. Лично я пишу
0
|
68 / 4 / 1
Регистрация: 11.10.2012
Сообщений: 89
|
|
14.07.2016, 13:46 [ТС] | 19 |
Переменная - это адрес. Ссылка это адрес переменной, то есть адрес адреса Указатель это адрес переменной, то есть адрес адреса ... однако
0
|
14.07.2016, 13:51 | 20 |
0
|
14.07.2016, 13:51 | |
Помогаю со студенческими работами здесь
20
В чем разница между char* и char[]?
Отличие char от string Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |