Я спрашивал это в прошлом вопросе, но мне не нужно было что-то по типу того, что амперсанд (&) показывает адрес переменной, что указатель - это переменная, содержащая адрес другой переменной и т. д
Нет, меня интересует именно звёздочка.
Я знаю, что с помощью неё можно присвоить указатель ( <Тип данных>* <переменная>; ), с помощью ее можно узнать адрес.
Но не понятно лишь одно: я знаю, что по типу что то int *b=a означает «передать инфу с а на b». Окей, я буду помнить и держать в голове, что так можно, но почему звездочку именно перед b, а не перед а?
То же самое с ситуациями, когда встречается что-то по типу cin>>*a и прочего.
Я не понимаю именно определение звездочки. Как оно механически устроено, что с помощью неё можно сделать помимо вышеперечисленных мною операции и т. д просто объясните простым словом определение этой звездочки.
По моему, звёздочка показывает значение адреса переменной указателя. Судя по моим наблюдениям за работами других людей с таким оператором я думаю именно так.
C/C++
Окей, все по новой. Что же на самом деле означает операция разыменования? C++
int *b
Это объявление переменной. В объявлении переменной смысл * не тот же самый, как в выражениях. Тип переменной: указатель на int.
Перед "а" тоже может быть *, или может быть &. В выражениях * и & являются операциями, каждая операция имеет свой смысл. Надо понимать этот смысл.
В объявлении & тоже может использоваться. Смысл не тот же самый, что в выражениях.
«передать инфу с а на b»
Это чушь.
При объявлении переменной с одновременной инициализацией синтаксис примерно такой (на самом деле всё сложнее):
тип-данных имя-переменной = выражение-инициализации
Поэтому слева от = и справа от = знаки * и & имеют разный смысл.
Это объявление переменной. В объявлении переменной смысл * не тот же самый, как в выражениях. Тип переменной: указатель на int.
Перед "а" тоже может быть *, или может быть &. В выражениях * и & являются операциями, каждая операция имеет свой смысл. Надо понимать этот смысл.
В объявлении & тоже может использоваться. Смысл не тот же самый, что в выражениях.
«передать инфу с а на b»
Это чушь.
При объявлении переменной с одновременной инициализацией синтаксис примерно такой (на самом деле всё сложнее):
тип-данных имя-переменной = выражение-инициализации
Поэтому слева от = и справа от = знаки * и & имеют разный смысл.
неверно понимаешь. по каждому абзацу не верно.
"int *a = b" и "*a = b" это разные ситуации. Это обьявление переменной с инициализацией в первом случае и присваивание во втором
---
int * a -- объявление переменной типа int*
int*a = b (если b int) объявление и инициализация переменной a значением переменной b
"int *a = b" и "*a = b" это разные ситуации. Это обьявление переменной с инициализацией в первом случае и присваивание во втором
---
int * a -- объявление переменной типа int*
int*a = b (если b int) объявление и инициализация переменной a значением переменной b
Смотри.
b имеет тип int*, а не int
значит в b хранится не ЗНАЧЕНИЕ, а АДРЕС переменной a.
То есть неверно, что a=b (в отличие от ссылок!)
но *b = a.
*b это разыменование.
Здесь * - это ОПЕРАТОР.
А * в "int*" обозначает тип указателя.
b имеет тип int*, а не int
значит в b хранится не ЗНАЧЕНИЕ, а АДРЕС переменной a.
То есть неверно, что a=b (в отличие от ссылок!)
но *b = a.
*b это разыменование.
Здесь * - это ОПЕРАТОР.
А * в "int*" обозначает тип указателя.
Понятия попутал.
Твое понимание такого базового понятия как "переменная" слишком простое что не позволяет тебе понимать такие процессы как объявление, инициализация, присваивание, копирование, построение, разрушение. Это разные процессы работающие по разному по этому их и называют разными словами. Думаю для тебя это все одно и то же по типу "передать инфу".
Понятие переменной это абстракция которая скрывает такие сущности как "имя переменной" и "значение переменной".
Операции с переменной работают именно со скрытыми сущностями.
К примеру процесс объявления работает только с именем переменной и никак не влияет на ее значение. Процесс инициализации связывает фактическое значение с именем переменной. и. т. д.
Что бы понимать процесс операций над переменными нужно понимать что же такое "переменная" и какие процессы с ней происходят.
>> что указатель - это переменная ...
Это ошибочное утверждение. Указатель это тип данных поэтому операции проводимые операторами работают заранее определенным образом. К примеру операция сложения между типами данных "число" и "строка" происходят по разному.
Тип данных указатель не является исключением поэтому операции над ним заранее определены.
ИМХО ты не разобрался с базовыми понятиями и процессами что не позволяет тебе понимать более сложные понятия опирающееся на базовые. Можно побороть это с помощью опыта и постепенно прийти к пониманию. Но лучше научится пользоваться логикой как инструментом для разрешения непоняток это сложнее но гораздо эффективнее.
Твое понимание такого базового понятия как "переменная" слишком простое что не позволяет тебе понимать такие процессы как объявление, инициализация, присваивание, копирование, построение, разрушение. Это разные процессы работающие по разному по этому их и называют разными словами. Думаю для тебя это все одно и то же по типу "передать инфу".
Понятие переменной это абстракция которая скрывает такие сущности как "имя переменной" и "значение переменной".
Операции с переменной работают именно со скрытыми сущностями.
К примеру процесс объявления работает только с именем переменной и никак не влияет на ее значение. Процесс инициализации связывает фактическое значение с именем переменной. и. т. д.
Что бы понимать процесс операций над переменными нужно понимать что же такое "переменная" и какие процессы с ней происходят.
>> что указатель - это переменная ...
Это ошибочное утверждение. Указатель это тип данных поэтому операции проводимые операторами работают заранее определенным образом. К примеру операция сложения между типами данных "число" и "строка" происходят по разному.
Тип данных указатель не является исключением поэтому операции над ним заранее определены.
ИМХО ты не разобрался с базовыми понятиями и процессами что не позволяет тебе понимать более сложные понятия опирающееся на базовые. Можно побороть это с помощью опыта и постепенно прийти к пониманию. Но лучше научится пользоваться логикой как инструментом для разрешения непоняток это сложнее но гораздо эффективнее.
Надо понимать, что звездочка тут - <Тип> * <имя_переменной>, и тут - *<имя_переменной>, - это две разных не связанных между собой вещи.
Первое - просто часть синтаксиса объявления. Второе - унарный оператор. Проще говоря, ты ищешь связь там, где её нет.
Ты бы ещё связь с бинарным оператором умножения * искал.
Первое - просто часть синтаксиса объявления. Второе - унарный оператор. Проще говоря, ты ищешь связь там, где её нет.
Ты бы ещё связь с бинарным оператором умножения * искал.
Похожие вопросы
- C++ побитовые операции
- Какие из этих книг вы посоветуете прочесть в первую очередь чтобы повысить свои знания в C/C++?
- Задача по C++
- Почему создатель Linux Линус Торвальдс называет C++ ужасным языком, а ядро ОС Linux пишется только на Си?
- День добрый \[-_-]/ вопрос по вузовскому программированию на си(C)
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Задача на C++ (Остатки).
- Программирование C++ ПРОШУ ПОМОЧЬ!
- Задача по c++ на векторы. Часть программы написана. Нужны правки.
- Проблема с указателем в C++
это будет компилироваться, только если b тоже является указателем на int.