Форум программистов, компьютерный форум CyberForum.ru

В чем отличие char* s от char *s - C++

Восстановить пароль Регистрация
 
 
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 09:34     В чем отличие char* s от char *s #1
В чем отличие
C++
1
char* str;
от
C++
1
char *str;
?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
no_attention
27 / 27 / 13
Регистрация: 18.05.2016
Сообщений: 128
14.07.2016, 09:36     В чем отличие char* s от char *s #2
laby, ни в чём, можно хоть
C++
1
char * s;
писать.
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 09:38  [ТС]     В чем отличие char* s от char *s #3
Что-то не верится. Где это написано? Блин вообще запутался, сложный язык.
no_attention
27 / 27 / 13
Регистрация: 18.05.2016
Сообщений: 128
14.07.2016, 09:41     В чем отличие char* s от char *s #4
laby, ну, если не верится, то можно проверить самостоятельно. Попробуйте создать программу с тремя такими объявлениями и поковыряться с ними.

Добавлено через 22 секунды
Можете ещё
C++
1
char*s;
добавить.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
14.07.2016, 09:42     В чем отличие char* s от char *s #5
Дело вкуса.
В принципе, можно в зависимости от того, где стоит звездочка, говорить:

char* str означает, что str является адресом переменной типа char

char *str означает, что при разыменавании str получим значение типа char

Я рекомендую использовать второй способ, т.к. в первом возможны накладки такого типа
C++
1
char* a, b;
b переменная типа char, а не char*
Надо все равно писать
C++
1
char* a,*b;
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 09:45  [ТС]     В чем отличие char* s от char *s #6
А
C++
1
char& str;
и
C++
1
char &str;
тоже одно и то же?

и что это?
no_attention
27 / 27 / 13
Регистрация: 18.05.2016
Сообщений: 128
14.07.2016, 09:49     В чем отличие char* s от char *s #7
laby, здесь тоже можно писать обоими способами.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
14.07.2016, 09:50     В чем отличие char* s от char *s #8
Вся шутка подобной расстановки знаков проявляется лишь в объявлении нескольких ссылок или указателей с помощью запятой:
C++
int *x, *y, *z
C++
int* x,* y,* z
C++
int * x, * y, * z
Типа можно ошибиться и подумать, что следующая запись объявит три именно указателя:
C++
int* x, y, z
Когда на самом деле здесь только x указатель, а y и z переменные.
Поэтому и пишут звездочку рядом с переменной, а не с типом, чтобы понимать что она относится не ко всему типу, а только к одной переменной.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
14.07.2016, 09:50     В чем отличие char* s от char *s #9
Это ссылка на переменную (или синоним переменной).
Так, как Вы написали, писать нельзя: ссылку нужно сразу же инициализировать.
C++
1
2
3
4
сhar a;
char& str=a;
str='b';
cout<<a;// выводится b
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 10:19  [ТС]     В чем отличие char* s от char *s #10
что еще за ссылка?

Добавлено через 5 минут
То есть это не взятие адреса?

Добавлено через 5 минут
* это объявление указателя и вместе с тем разыменовывание этого указателя
& это объявление ссылки и вместе с тем взятие адреса
запутали одно и то же для разных вещей. Еще бы понять физически как формируется эта ссылка. Это новое в памяти или то же. Судя по всему то же. А зачем оно нужно. Ну в процедурах понятно для передачи параметра чтоб его можно было там изменить. А вот при описании переменной зачем. И опять же в процедурах можно ведь передавать указатель. Зачем этот &.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
14.07.2016, 10:39     В чем отличие char* s от char *s #11
Цитата Сообщение от laby Посмотреть сообщение
что еще за ссылка?
Повторюсь - это синоним переменной.
Удобно его использовать при передаче параметров
C++
1
2
3
4
5
6
7
8
9
10
11
12
void swap(int& a,int& b)
{
   int t=a;
   a=b;
   b=t;
}
int main()
{
    int x=1,y=2;
    swap(x,y); // a становится синонимом x, b - синонимом y
    cout<<x<<' '<<y;  // выводится 2 1
}
shezu
4 / 4 / 0
Регистрация: 20.01.2016
Сообщений: 24
14.07.2016, 10:41     В чем отличие char* s от char *s #12
laby, чтобы примерно понимал, приведу неправильный пример из реальной жизни. В разговорных языках бывает несколько слов означающие одно и тоже, зовутся такие слова синонимами. Так вот ссылка - почти тот же синоним, только в C, C++ она получает адрес памяти другой переменной. То что будет записано в этой области памяти, то и будешь получать со всех переменных, которые имеют доступ к этой самой области памяти.
Пример такой:
C++
1
2
3
4
5
6
    int a = 0;
    int &b = a;
    cout << a << endl; // 0
    b = 5;
    cout << a << endl; // 5
    cout << b << endl; // 5
Переменная 'b' получила адрес памяти переменной a, следующей строкой (b = 5) я записал в этот адрес значение 5. Так как адрес у переменной 'a' и 'b' один и тот же, то и значения одинаковые (когда выполнилось b = 5, то и 'a' стала значением 5).
* - указатель на адрес.
& - ссылка на адрес.

Добавлено через 1 минуту
Кстати, как указал zss, то при передаче параметнов это очень хороший способ использовать ссылки, дабы не выделять дополнительно память.
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 11:45  [ТС]     В чем отличие char* s от char *s #13
Ну всё равно сложно. Наверное так:
* - адрес адреса переменной.
& - адрес переменной.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
14.07.2016, 11:59     В чем отличие char* s от char *s #14
Не путайте использование амперсанда в операции взятия адреса и в объявлении ссылки.
Считайте, что это РАЗНЫЕ знаки.
C++
1
2
3
int a;
int *pa=&a; // взятие адреса
int &ri=a;// объявление ссылки(синонима)
Ferrari F1
Заблокирован
416 / 290 / 63
Регистрация: 27.01.2015
Сообщений: 1,940
Записей в блоге: 1
Завершенные тесты: 1
14.07.2016, 12:14     В чем отличие char* s от char *s #15
laby, ипользование знака (&) и (*) зависит от контекста их применения, как уже написал zss
shezu
4 / 4 / 0
Регистрация: 20.01.2016
Сообщений: 24
14.07.2016, 13:27     В чем отличие char* s от char *s #16
zss, не накручивай себя, из-за этого тебе сложно. Мысли проще.
Адрес адреса переменной - такого нету. Если указатель на адрес. Есть ссылка.
zss
Модератор
Эксперт С++
 Аватар для zss
5956 / 5561 / 1788
Регистрация: 18.12.2011
Сообщений: 14,210
Завершенные тесты: 1
14.07.2016, 13:29     В чем отличие char* s от char *s #17
shezu, Про адрес адреса разговора не было.
fire_Rising
 Аватар для fire_Rising
10 / 11 / 2
Регистрация: 11.05.2016
Сообщений: 111
14.07.2016, 13:42     В чем отличие char* s от char *s #18
Когда пишут
C++
1
char *s;
имеют ввиду что s является указателем на тип char

Когда пишут
C++
1
char* s;
Имею ввиду то, что s это указатель типа char.

Можно писать как угодно, как тебе удобно, как тебе кажется логичней.
Лично я пишу
C++
1
char *s;
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 13:46  [ТС]     В чем отличие char* s от char *s #19
zss, не накручивай себя, из-за этого тебе сложно. Мысли проще.
Адрес адреса переменной - такого нету. Если указатель на адрес. Есть ссылка.
Это я накручиваю.
Переменная - это адрес.
Ссылка это адрес переменной, то есть адрес адреса
Указатель это адрес переменной, то есть адрес адреса
...
однако
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2016, 13:51     В чем отличие char* s от char *s
Еще ссылки по теме:

C++ Отличие char от string
C++ Строка: чем отличается строки string, char, char*?
Работа со строками - Invalid conversion from 'char' to 'const char*' C++

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

Или воспользуйтесь поиском по форуму:
Ferrari F1
Заблокирован
416 / 290 / 63
Регистрация: 27.01.2015
Сообщений: 1,940
Записей в блоге: 1
Завершенные тесты: 1
14.07.2016, 13:51     В чем отличие char* s от char *s #20
Цитата Сообщение от laby Посмотреть сообщение
Указатель это адрес переменной
Обычно, указатель - это переменная, хранящая адрес.
Yandex
Объявления
14.07.2016, 13:51     В чем отличие char* s от char *s
Ответ Создать тему
Опции темы

Текущее время: 16:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru