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

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

Войти
Регистрация
Восстановить пароль
 
 
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
#1

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

14.07.2016, 09:34. Просмотров 779. Ответов 32
Метки нет (Все метки)

В чем отличие
C++
1
char* str;
от
C++
1
char *str;
?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2016, 09:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В чем отличие char* s от char *s (C++):

В чем отличие двумерного массива типа char от массива указателей на char? - C++
В чем отличие двумерного массива типа char и массива указателей на char ?

Строка: чем отличается строки string, char, char*? - C++
Помогите разобраться,совсем плохо идёт,чем отличается строки string,char,char* И если можно пару примеров Буду весьма признательна

В чем разница между char* и char[]? - C++
Доброго времени суток, наткнулся на одну загвоздку есть такой кусок кода int _tmain(int argc, _TCHAR* argv) { char *a =...

В чем разница между char* и char ** - C++
в чем разница между char* и char ** ??

Отличие char от string - C++
Я не могу понять отличие Char от String. Эти два оператора работают со строками, а самое главное в них отличие? В каком случае что лучше...

Чем отличаются объявления const char* и const* char - C++
Прошу объяснить мне, чем отличаются объявления const char* и const* char и как объявить: указатель на константный массив символов, ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
shezu
4 / 4 / 0
Регистрация: 20.01.2016
Сообщений: 24
14.07.2016, 13:27 #16
zss, не накручивай себя, из-за этого тебе сложно. Мысли проще.
Адрес адреса переменной - такого нету. Если указатель на адрес. Есть ссылка.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
14.07.2016, 13:29 #17
shezu, Про адрес адреса разговора не было.
0
fire_Rising
10 / 11 / 2
Регистрация: 11.05.2016
Сообщений: 113
14.07.2016, 13:42 #18
Когда пишут
C++
1
char *s;
имеют ввиду что s является указателем на тип char

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

Можно писать как угодно, как тебе удобно, как тебе кажется логичней.
Лично я пишу
C++
1
char *s;
0
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 13:46  [ТС] #19
zss, не накручивай себя, из-за этого тебе сложно. Мысли проще.
Адрес адреса переменной - такого нету. Если указатель на адрес. Есть ссылка.
Это я накручиваю.
Переменная - это адрес.
Ссылка это адрес переменной, то есть адрес адреса
Указатель это адрес переменной, то есть адрес адреса
...
однако
0
Ferrari F1
=^_^=
570 / 457 / 94
Регистрация: 27.01.2015
Сообщений: 2,694
Записей в блоге: 1
Завершенные тесты: 1
14.07.2016, 13:51 #20
Цитата Сообщение от laby Посмотреть сообщение
Указатель это адрес переменной
Обычно, указатель - это переменная, хранящая адрес.
0
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 13:59  [ТС] #21
Переменная это адрес. Ссылка на переменную это ссылка на адрес то есть адрес адреса. Указатель на переменную это указатель на адрес, то есть адрес адреса. Всё адрес адреса.
0
Croessmah
Эксперт CЭксперт С++
13214 / 7485 / 843
Регистрация: 27.09.2012
Сообщений: 18,401
Записей в блоге: 3
Завершенные тесты: 1
14.07.2016, 14:08 #22
Цитата Сообщение от laby Посмотреть сообщение
Переменная это адрес.
А если компилятор её удалит?
Останется ли адрес?
А считать ли такую переменную переменной?
А константные переменные, это переменные?
А если переменной нет, а адрес есть?
А функция? У нее же есть какой-то адрес?
А ведь она не переменная?
А у Кощея было... эммм, что-то я не туда...
0
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
14.07.2016, 14:11  [ТС] #23
А если компилятор её удалит?
Останется ли адрес?
Куда он денется!

А считать ли такую переменную переменной?
Компилятор же ее удалил -нет.

А если переменной нет, а адрес есть?
Адрес он и есть адрес, куда он денется.

А функция? У нее же есть какой-то адрес?
А ведь она не переменная?
А у Кощея было... эммм, что-то я не туда...
А это всё уже не по теме.

Да, я писал, что переменная это адрес, но не писал, что адрес это переменная. Адрес это всё что угодно - аптека, баня, ...
0
avgoor
904 / 539 / 117
Регистрация: 05.12.2015
Сообщений: 1,504
14.07.2016, 22:01 #24
Цитата Сообщение от laby Посмотреть сообщение
Да, я писал, что переменная это адрес
А дом - это его адрес?
0
shezu
4 / 4 / 0
Регистрация: 20.01.2016
Сообщений: 24
14.07.2016, 23:02 #25
zss, твой ник случайно вставил, извиняюсь

laby, нет никакого "адрес адреса".
Представь что ты тыкаешь на кого-то пальцем, ты на него указываешь, а указываешь на человека, сущность. Я же не пишу что Ты "тыкальщик тыкальщика", Ты же понимаешь как это вообще глупо звучит? Вот то же самое про "адрес адреса".
Адрес всегда один, не может быть адрес внутри адреса в программировании (если бы было такое возможно, то понятие "адрес адреса" было бы приемлемо).
Указатель - не адрес вообще, а указатель на адрес.
Ссылка - адрес переменной, но не адрес адреса, и работать с ссылкой можно как с обычной переменной в С и С++.
Переменная - это сущность, значение, объект, что угодно, но не адрес.
Хватит выделываться. Ты создал тему и спросил у знатоков, вот послушай знатоков, а то почти получается ты нас учишь, а не мы тебя. Если не можешь послушать нас - погугли, и попробуй ещё миру доказать что есть понятие "адрес адреса". Если хотя бы подумаешь об этом (чтобы попробовать доказать миру) - скажи мне, я убью свою собаку. Пожалей хоть её.
Ты либо тролишь всех, либо пойди в компанию, фирму, контору (куда угодно где программируют) и скажи что ты умеешь работать с "адресом адреса" в С, С++, Тебе там все вместе расскажут что такое "адрес адреса", после вынесут, потому что Сам уже будешь не в состоянии уйти.

Тебе не отвечали на твой вопрос по-дебильному: "а зачем тебе это?", - Тебе ответили чётко на твой вопрос. Я даже не уверен что снова кто-то ответит, нет смысла повторять одно и то же более 3х раз, принимай остальное как пожелаешь, твоё дело и проблемы твои.

Если Твоя цель, как я понял, уметь в С, С++ - не выпендривайся, а делай что требуется. А требуется от Тебя сперва забыть про "адрес адреса" и перечитать что я написал в этом сообщении и остальные до этого сообщения ещё раз (если верующий - не читай свои сообщения в этой теме, ибо нагрешишь, а если не верующий, тоже не читай свои сообщения).
0
avgoor
904 / 539 / 117
Регистрация: 05.12.2015
Сообщений: 1,504
15.07.2016, 00:22 #26
Цитата Сообщение от shezu Посмотреть сообщение
Указатель - не адрес вообще, а указатель на адрес.
Ссылка - адрес переменной, но не адрес адреса, и работать с ссылкой можно как с обычной переменной в С и С++.
Вот, ни разу не угадали.
0
shezu
4 / 4 / 0
Регистрация: 20.01.2016
Сообщений: 24
15.07.2016, 07:44 #27
avgoor, указатель - адрес, ссылающийся на область памяти, а ссылка - обычный тип данных, безопаснее указателей
0
laby
68 / 4 / 2
Регистрация: 11.10.2012
Сообщений: 89
15.07.2016, 08:17  [ТС] #28
На область памяти - то есть на адрес этой области (значение переменной).
Переменная типа ссылка тоже указывает на область памяти.

Может быть так:

Переменная типа указатель - адрес адреса значения переменной
Переменная типа ссылка - адрес значения переменной также как и сама переменная

?

Я говорю упрощенно, просто пытаюсь понять для себя как понимать эти * и &
0
shezu
4 / 4 / 0
Регистрация: 20.01.2016
Сообщений: 24
15.07.2016, 09:11 #29
laby, переменная типа ссылка (&) не указывает память, она работает с ней. Это такая же обычная переменная, которая работает с той же памятью переменной, которую ты присваиваешь ссылке. Ссылка не является адресом, она себе присвоила адрес на эпапе инициализации и является переменной ссылочного типа.
Указатель (*) - адрес в памяти, с которой он может работать.
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
#include <iostream>
 
using namespace std;
 
int main()
{
    int a; // создана переменная
    cout << a << endl; // достать значение памяти из переменной
    cout << &a << endl; // достать адрес памяти из переменной
    int *b = &a; // создать указатель и присвоить ему адрес
//    b = (int*)(0x7ffe1d8dcdbc); // так можно вручную присваивать адреса, но не стоит так делать вовсе
    cout << *b << endl; // достать значение памяти из указателя
    cout << b << endl; // достать адрес, на которрую ссылкается указатель
    int &c = a; // создать ссылочную переменную и записать в неё адрес переменной "a"
    cout << c << endl; // достать значение памяти переменной ссылочного типа
    cout << &c << endl; // достать адрес памяти переменной ссылочного типа
    
    int d; // выделена новая память под новую переменную
    b = &d; // присваиваем указателю другой адрес
    b = &a; // вернули адрес переменной, созданной при инициализации
    
    b = new int; // выделена новая память и её адрес записан в указатель "b"
    *b = 3; // присвоили памяти значение "3" по адресу, который кранит указатель "b"
    delete b; // очистили память по адресу, на который указывал указатель "b" и освободили память
    b = new int(5); // выделена новая память со значением "5" и её адрес записан в указатель "b"
    delete b; // очистили память по адресу, на который указывал указатель "b" и освободили память
    
    return 0;
}
Переменная типа ссылка - не адрес, память не то же самое что адрес. Получается нет никакого "адрес адреса".
Переменная типа ссылка - синоним другой переменной (как ссылочного так и обычного типа), не более того. Это безопаснее чем работа с адресом, но менее гибкий способ.

Есть память, у памяти есть ячейки, каждая ячейка имеет адрес.
0
hoggy
Нарушитель
6566 / 2747 / 474
Регистрация: 15.11.2014
Сообщений: 6,096
Завершенные тесты: 1
15.07.2016, 13:42 #30
Цитата Сообщение от shezu Посмотреть сообщение
Переменная типа ссылка - синоним другой переменной (как ссылочного так и обычного типа), не более того.
вроде вы демонстрируете понимание момента.
но потом вы пишите:

Цитата Сообщение от shezu Посмотреть сообщение
cout << &c << endl; // достать адрес памяти переменной ссылочного типа
у ссылок нет собственного объекта.
они - лишь псевдонимы, альтернативные имена объектов.
нельзя взять адрес того, чего на самом деле не существует.

взятие адреса у ссылки - это взятие адреса объекта,
синонимом которого она является,
а не самой ссылки.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2016, 13:42
Привет! Вот еще темы с ответами:

Отличие char *argv[] от char ** argv - C++
Подскажите отличие между int main(int argc, char *argv) { //.... } и int main(int argc, char** argv) { //.... }

Тип char.Signed/unsigned.Отличие типов данных. - C++
Вопрос немного может быть не туда... Прошу прощения. Пишу прошивку к контроллеру, на С. Интересует отличие типов данных. ДОпустим есть тип...

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& - C++
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt; const&amp;, unsigned short); ...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь( - C++
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она ругалась на Cannot convert char* to char теперь вроде...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.07.2016, 13:42
Ответ Создать тему
Опции темы

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