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

Почему при присваивании адреса массива не ставится знак '&' получения адреса - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Aqua77
4 / 4 / 1
Регистрация: 13.07.2015
Сообщений: 315
22.11.2015, 21:01     Почему при присваивании адреса массива не ставится знак '&' получения адреса #1
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    int a[2] = { 2, 3 };
    int* b;
    b = a; //Почему при присваивании адреса массива не ставится знак '&' получения адреса.
//А когда присваиваешь адрес отдельной переменной, то необходимо ставить этот знак.
//int a=2;
    int* b;
    b = &a;//
}
И ещё адрес массива из пяти элементов передаст указателю все пять элементов? От адреса первого [0] до адреса последнего [4]. То есть, после такого присвоения указатель будет иметь все 5 адресов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2015, 21:01     Почему при присваивании адреса массива не ставится знак '&' получения адреса
Посмотрите здесь:

C++ Почему указатели имеют одинаковые адреса
Определить адреса и значения элементов массива C++
C++ Почему выводит адреса?
C++ [Указатели]Использование операции получения адреса операнда
C++ Найти адреса элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
24.11.2015, 17:24     Почему при присваивании адреса массива не ставится знак '&' получения адреса #41
Цитата Сообщение от Croessmah Посмотреть сообщение
У объекта один тип.
Да, это тип 0. Каждый объект принадлежит как минимум одной категории: один объект и одни морфизм Id.

Цитата Сообщение от Croessmah Посмотреть сообщение
Никаких конфликтов, потому что 0 - int
Никаких конфликтов, потому что есть определённые правила выбора перегруженной функции.

Тип определяется только тем, какие выражения являются верными над объектом.

Любое натуральное число -- целое. Любой массив -- указатель.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
24.11.2015, 17:29     Почему при присваивании адреса массива не ставится знак '&' получения адреса #42
Цитата Сообщение от mporro Посмотреть сообщение
Любой массив -- указатель.
лишь преобразовывается в него.
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.11.2015, 17:35     Почему при присваивании адреса массива не ставится знак '&' получения адреса #43
Цитата Сообщение от Croessmah Посмотреть сообщение
У объекта один тип.
Класс один. А типов может быть несколько. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct A {};
struct B {};
struct C : A, B {};
 
void f(A&) {}
void f(B&) {}
 
int main()
{
    C c; // класс C; типы A,B,C
    f(c); // неоднозначаность, т.к. подходит и A, и B
}
Цитата Сообщение от Croessmah Посмотреть сообщение
Никаких конфликтов, потому что 0 - int
Веселье начинается когда ожидаешь, что f(NULL) вызовет версию для указателя, а вызывается для целого.
Кликните здесь для просмотра всего текста
nullptr спасет отца русской демократии
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
24.11.2015, 17:35     Почему при присваивании адреса массива не ставится знак '&' получения адреса #44
неявно
Цитата Сообщение от Croessmah Посмотреть сообщение
преобразовывается в него
То есть, состоит в отношении является.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
24.11.2015, 17:48     Почему при присваивании адреса массива не ставится знак '&' получения адреса #45
http://stackoverflow.com/questions/3...s-are-pointers

Цитата Сообщение от Tulosba Посмотреть сообщение
Класс один. А типов может быть несколько.
вернемся
The term object type refers to the type with which the object is created.
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
24.11.2015, 17:52     Почему при присваивании адреса массива не ставится знак '&' получения адреса #46
Croessmah
Pointers are not arrays. Именно это в действительности разобрано по ссылке.

Стандарт написан не только для тех, кто использует язык, но и для тех, кто реализует компиляторы, потому в стандарте есть детали реализации, в которые программисты, по существу, даже не должны лезть.
В частности для программиста нет разницы между неявным преобразованием и отношением является. Для тех, кто производит компиляторы разница есть. Им нужно решать -- есть ли необходимость создавать новый объект, когда можно, а когда нельзя применить оптимизацию.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
24.11.2015, 18:02     Почему при присваивании адреса массива не ставится знак '&' получения адреса #47
Цитата Сообщение от mporro Посмотреть сообщение
В частности для программиста нет разницы между неявным преобразованием и отношением является.
ага, а потом они бегают по форуму с вопросами почему не ставится и почему размер не тот
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
24.11.2015, 18:06     Почему при присваивании адреса массива не ставится знак '&' получения адреса #48
Цитата Сообщение от Croessmah Посмотреть сообщение
а потом они бегают по форуму с вопросами почему
По этой причине всем новичкам C++ стоит говорить, что массив это вообще не int a[5], а классы из <valarray> или <array>. А за int a[5] бить по рукам линейкой.
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.11.2015, 18:12     Почему при присваивании адреса массива не ставится знак '&' получения адреса #49
Цитата Сообщение от Croessmah Посмотреть сообщение
вернемся
Так-то да (прям как объекты из Стандарта и от Саттера ).
Но с точки зрения ООП терминологии типов может быть несколько.
http://stackoverflow.com/a/769399/3240681

Добавлено через 44 секунды
Цитата Сообщение от mporro Посмотреть сообщение
массив это вообще не int a[5], а классы из <valarray> или <array>
Но-но-но. Палехче!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
24.11.2015, 18:15     Почему при присваивании адреса массива не ставится знак '&' получения адреса #50
Цитата Сообщение от Tulosba Посмотреть сообщение
Но с точки зрения ООП терминологии типов может быть несколько.
Тогда уж любой объект - это последовательность байт
Байт
24.11.2015, 18:17
  #51

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
любой объект - это последовательность байт
Да, да! Я всегда говорил это!

Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.11.2015, 18:23     Почему при присваивании адреса массива не ставится знак '&' получения адреса #52
Цитата Сообщение от Croessmah Посмотреть сообщение
Тогда уж любой объект - это последовательность байт
Так и есть
An object is a region of storage.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
24.11.2015, 18:26     Почему при присваивании адреса массива не ставится знак '&' получения адреса #53
Цитата Сообщение от Tulosba Посмотреть сообщение
Так и есть
еще
The object representation of an object of type T is the sequence of N unsigned char objects taken up by the object of type T, where N equals sizeof(T). The value representation of an object is the set of bits that hold the value of type T.
Tulosba
24.11.2015, 18:35
  #54

Не по теме:

Ага. А человек - набор из мяса, костей и ведра кровищи. А не какой-то там индивидуум.

Croessmah
24.11.2015, 18:40
  #55

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
А человек - набор из мяса, костей и ведра кровищи.
мясо, кости, кровь - это составные типы

daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
24.11.2015, 19:14     Почему при присваивании адреса массива не ставится знак '&' получения адреса #56
Новичкам надо говорить правду и вбивать им в голову, что есть стандарт, отладчик и ассемблерный код
(тут, правда, ассемблер не нужен, но иногда нужно к ассемблеру прибегать).

Вот им говорят, что имя массива - это указатель на его первый элемент, а он смотрит в отладчик и видит, что что-то не так. Кредит доверия отладчику резко упал, все отладчики стали говном, новичок им не верит, несет всякую чушь и задает тупые вопросы. (компиляторы у него ошибаются, отладчики бредят, только сам он умен, знаете ли, но почему-то там где-то косяк и тут где-то косяк и туча этих таких косяков. Надо задать вопрос, ведь объяснят лучше чем отладчик, стандарт и ассемблер. Чужое время, оно же гроша ломанного не стоит. Пусть на него любимого тратят свое. А все из мелочей пришло. Такие скользкие, неприятные мелочи. Недоговоренности, ошибочности).

(Я тоже жертва подобных неточностей).

У ТС вообще вопроса бы не возникло, если бы ему изначально было вдолблено, что тут неявное приведение. Что имя массива - всего-лишь идентификатор, некая сущность, которая даже переменной-то не является, но умеет становиться указателем на адрес своего начала и при необходимости становится им, потому что это стандартом оговорено.
Миниатюры
Почему при присваивании адреса массива не ставится знак '&' получения адреса  
Tulosba
:)
Эксперт C++
4377 / 3220 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.11.2015, 20:54     Почему при присваивании адреса массива не ставится знак '&' получения адреса #57
daslex,Почему при присваивании адреса массива не ставится знак '&' получения адреса
Из 2015 студии.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
24.11.2015, 21:04     Почему при присваивании адреса массива не ставится знак '&' получения адреса #58
ну там значит область памяти типизирована
на моем скрине не типизирована.
неодназначность, а так как это студия, то даже стандарт ничего не расскажет. Товарищи из Microsoft, похоже тоже запутались.
___________
у меня тоже 2015 (pro).
zer0mail
2176 / 1859 / 187
Регистрация: 03.07.2012
Сообщений: 6,615
Записей в блоге: 1
25.11.2015, 07:23     Почему при присваивании адреса массива не ставится знак '&' получения адреса #59
Цитата Сообщение от Tulosba Посмотреть сообщение
Из 2015 студии.
Точка останова на присвоении. так что в p еще ничего не записано.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2015, 07:38     Почему при присваивании адреса массива не ставится знак '&' получения адреса
Еще ссылки по теме:

Почему адреса одинаковые? C++
C++ Почему в scanf нужно указывать именно адреса переменных?
Операция получения адреса & и vector C++

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

Или воспользуйтесь поиском по форуму:
zer0mail
2176 / 1859 / 187
Регистрация: 03.07.2012
Сообщений: 6,615
Записей в блоге: 1
25.11.2015, 07:38     Почему при присваивании адреса массива не ставится знак '&' получения адреса #60
Небольшой пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void fa(int a[2])   {   cout<<sizeof(a);    }
void fp(int* p)     {   cout<<sizeof(p);    }
int main()
{
    int i;
    int A[2];
    int *p=A;
    cout<<sizeof(A);
    cout<<sizeof(p);
    p=new int[5];
    cout<<sizeof(p)<<endl;
    fa(A);
    fa(p);
    fp(A);
    fp(p);
    return 0;
}
sizeof() при передаче массива, как параметра, возвращает размер указателя
Миниатюры
Почему при присваивании адреса массива не ставится знак '&' получения адреса  
Yandex
Объявления
25.11.2015, 07:38     Почему при присваивании адреса массива не ставится знак '&' получения адреса
Ответ Создать тему
Опции темы

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