Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/34: Рейтинг темы: голосов - 34, средняя оценка - 4.94
25 / 25 / 19
Регистрация: 13.07.2015
Сообщений: 433

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

22.11.2015, 21:01. Показов 7974. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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 адресов?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.11.2015, 21:01
Ответы с готовыми решениями:

Операция получения адреса & и vector
Здравствуйте. Работает ли Операция получения адреса (&) в векторе? Просто есть пример в книги, но про вектор ничего не сказано....

1. Ввести символьный массив. Найти адреса всех парных его элементов. 2. Вывести адреса элементов массива 4 на 4, находящ
Помогите пж... 1. Ввести символьный массив. Найти адреса всех парных его элементов. 2. Вывести адреса элементов массива 4 на 4,...

Почему разные адреса одного и того же элемента динамического массива?
Я создаю динамический массив и отправляю его в функцию, если потом сравнивать адреса элементов массива в главной и вызываемой функции они...

88
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.11.2015, 08:00
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zer0mail Посмотреть сообщение
Точка останова на присвоении. так что в p еще ничего не записано.
Картинка использовалась для демонстрации типа, а не значения.
Цитата Сообщение от zer0mail Посмотреть сообщение
Небольшой пример:
Если fa и fp имели бы одинаковые имена, сразу получил бы ошибку компиляции, из-за идентичности сигнатур. И дальнейшие изыскания с sizeof стали бы очевидны.

Хочется передавать именно массив и получать его размер через sizeof? Придется прибегнуть к ссылкам и шаблонам:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
template <class T, int N>
void f( T (&a)[N] ) {
    std::cout << sizeof(a) << std::endl;
}
 
int main() {
    int a[10];
    f(a);
}
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
25.11.2015, 08:58
Цитата Сообщение от zer0mail Посмотреть сообщение
Небольшой пример:
Это очередная накладка в попытке использовать массив как абстракцию.
К сожалению, массив C -- не абстракция.
Нет возможности передать в функцию объект-массив-C. Если бы Вы включили опцию -Wall, то сразу бы всё увидели.

А если Вы напишите функцию с сигнатурой void farray(int (&array)[2]);, не передаём объект, а его имя, то получите ошибку компиляции при вызове farray(p);, так как указатель не является массивом из двух элементов.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 06:22
Цитата Сообщение от mporro Посмотреть сообщение
массив C -- не абстракция
Абстракция. Но не first-class citizen.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.11.2015, 07:35
Ну как не стыдно замусоривать плюсовой раздел всякой сишней. Я, например, никогда не использую этот глупый недотип. А людям еще не лень обсуждать на многих страницах этот сишный идиотизм.
Мне вот другое интересно, почему даже при наличии типа array студенты массово используют в плюсах сишные массивы? Это же наверно от преподавателей исходит. А им это зачем? Какое-то необъяснимое массовое помешательство.
1
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
27.11.2015, 07:53
Mr.X
Ну хоть один человек нормальный.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 07:57
Цитата Сообщение от Mr.X Посмотреть сообщение
Ну как не стыдно
Страуструпу в своей книге "Язык программирования С++" не стыдно, так и нам нормально.
0
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
27.11.2015, 07:59
Цитата Сообщение от gru74ik Посмотреть сообщение
Страуструпу не стыдно
Я как раз из "cтрауструпа" хорошо запомнил, что использовать массивы C нельзя, вместо них есть <valarray>.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 08:13
А я
Цитата Сообщение от mporro Посмотреть сообщение
как раз из "cтрауструпа" хорошо запомнил, что
обсуждать сишные массивы не стыдно. Иначе бы Страуструп не написал в своей книге по С++ про них несколько глав.
И вот такого
Цитата Сообщение от mporro Посмотреть сообщение
использовать массивы C нельзя, вместо них есть <valarray>
я что-то у Страуструпа не встречал. Имеются неоднократные упоминания о том, что вместо сишных массивов по разным причинам лучше использовать различные классы, например:
Цитата Сообщение от Бьярне Страуструп
Заметим, что большинство реализующих язык C++ программных средств не
предоставляет никаких способов контроля границ массива. Такая концепция
массивов весьма низкоуровневая. Более интеллектуальные концепции массивов
можно реализовать с помощью классов (§3.7.1).
Цитата Сообщение от Бьярне Страуструп
тип vector и другие типы стандартной библиотеки являются
прекрасной альтернативой низкоуровневым встроенным типам —
массивам и указателям.
Но нигде нет упоминания о том, что сишные массивы или их обсуждение в рамках языка С++ - это "стыдно" или что использовать сишные массивы в С++ "нельзя".
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.11.2015, 08:15
Цитата Сообщение от gru74ik Посмотреть сообщение
Страуструпу в своей книге "Язык программирования С++" не стыдно, так и нам нормально.
Ну, он включил всю сишню для совместимости, однако в своей книжке не рекомендовал ей пользоваться, а предпочитать более высокоуровневые вещи.
Си - это примитивный полуассемблер, где многое сделано через задницу. Использовать эту белиберду в плюсах - глупо и позорно.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 08:24
Цитата Сообщение от Mr.X Посмотреть сообщение
в своей книжке не рекомендовал ей пользоваться, а предпочитать более высокоуровневые вещи
С этим согласен.

Цитата Сообщение от Mr.X Посмотреть сообщение
Си - это примитивный полуассемблер, где многое сделано через задницу.
С этим не согласен. Для своего круга задач Си - прекрасный язык. Иначе его бы не использовали до сих пор.

Цитата Сообщение от Mr.X Посмотреть сообщение
Использовать эту белиберду в плюсах - глупо и позорно
Чаще всего неоправданно. Зачастую глупо, согласен. Позорно - не соглашусь. Студентов учат как внутри устроен вектор и стринг не зря. А без знания сишных указателей и массивов, эти темы нормально не усвоишь.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
27.11.2015, 08:30
А уж как удобно юзать многомерные массивы, которые array, ведь
C++
1
2
array<array<array<int,10>,20>,30> arr; //Заметно лаконичнее и читабельнее чем
int arr[10][20][30]
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.11.2015, 08:36
Цитата Сообщение от gru74ik Посмотреть сообщение
Для своего круга задач Си - прекрасный язык.
Ну, эффективный - да. Именно поэтому его Страуструп и взял за основу. Однако он не является языком высокого уровня, а только имитирует таковой, предоставляя вместо типов недотипы вроде массивов и сишных строк. Не знаю что вы в них прекрасного видите. Мне кажется, на них легче плюнуть, чем изучать и использовать.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
27.11.2015, 08:45
А вот что писано у Страуструпа
Однако массивы существовали задолго до появления векторов и являлись их приблизительным прототипом во многих языках (особенно в языке С),поэтому их следует знать хорошо, чтобы иметь возможность работать со старыми программами или с программами, написанными людьми, не признающими преимущества класса vector.
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.11.2015, 09:06
Цитата Сообщение от daslex Посмотреть сообщение
А уж как удобно юзать многомерные массивы, которые array, ведь
C++
1
2
array<array<array<int,10>,20>,30> arr; //Заметно лаконичнее и читабельнее чем
int arr[10][20][30]
А typedef уже отменили что ли?
C++
1
2
typedef std::array  < int,      2   >   T_row;
typedef std::array  < T_row,    2   >   T_matr;
Добавлено через 4 минуты
Цитата Сообщение от daslex Посмотреть сообщение
А вот что писано у Страуструпа
Непонятно, вы в защиту массивов это цитируете или наоборот?
Написано, что знать надо, а использовать он не рекомендует.
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
27.11.2015, 09:52
Почему при присваивании адреса массива не ставится знак '&' получения адреса
Читаем создателя С++, почему у него с его предшественниками именно так допускается и видим ответ на вопрос ТС

Имя массива относится ко всем элементам массива. Рассмотрим пример,
char ch[100];
Размер массива ch, т.е. sizeof (ch), равен 100. Однако имя массива без видимых причин превращается в указатель.
А зачем оно ему понадобилось, написано им же
Одна из причин, по которым имена массивов могут превращаться в указатели, состоит в желании избежать передачи большого объема данных по значению.
Он из редких людей, кто говорит об имени массива, не как об указателе. В отличии от многих последующих авторов учебной литературы, которые своим допущением ввели много народу в заблуждения.
Обратите внимание на то, что указатель, образованный из имени массива, установлен на его первый элемент и не является переменной, т.е. ему ничего нельзя присвоить.
Во избежание тупых холиваров некоторых самоуверенных знатоков (к титанам форума это отношения не имеет, я имею ввиду свой уровень знаний и ниже его).
Листинги
C++
1
2
 const int z = 100;
 const int * const p = &z; //Константный указатель на константу
если считать массив константным указателем, то он обязан уметь делать то, что умеет делать константный указатель.
C++
1
2
const int z[100] = {1,2};
 const int p[100] = z; //Попытка инициализировать массив, константными значениями, скопировав их из z прямое следствие ошибки интерпретации имени массива как константного указателя на начало
И на десерт —
проблема, которую компилятор может перехватить!
Вследствие неявного превращения имени массива в указатель мы не можем даже
скопировать массивы с помощью оператора присваивания.
В том числе у Страуструпа достаточно много напутствий на использование более высокоуровневых массивов чем сишные массивы
Люди часто сами создают себе проблемы, используя указатели и массивы.
Класс vector следует использовать при любой возможности.
В С++ 11 Класс array, о котором в старых книгах не пишут, но безусловно бы советовали использовать и его при необходимости создавать массив фиксированного размера.
__________________________

Я у него вижу только советы и напутствия на использование более высокоуровневых возможностей языка при любой возможности их использования, а это совсем не то же самое, что абсолютная нерекоммендованность.
________

Не по теме:

столько холивару на простой и очень не редкий вопрос, что просто жесть.

1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 10:25
Цитата Сообщение от Mr.X Посмотреть сообщение
Непонятно, вы в защиту массивов это цитируете или наоборот?
А третий вариант не судьба предположить? Только бинарная логика? Чёрное/белое?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.11.2015, 10:39
Цитата Сообщение от gru74ik Посмотреть сообщение
А третий вариант не судьба предположить? Только бинарная логика? Чёрное/белое?
Туманное сообщение... А почему сразу третий, а не триста пятьдесят восьмой?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 10:51
Mr.X, потому что Вы рассуждаете в терминах хороший/плохой, чёрный/белый, позорный/достойный. А то, что обе концепции имеют право на жизнь в голову не приходило?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
27.11.2015, 10:59
Цитата Сообщение от gru74ik Посмотреть сообщение
Mr.X, потому что Вы рассуждаете в терминах хороший/плохой, чёрный/белый, позорный/достойный. А то, что обе концепции имеют право на жизнь в голову не приходило?
Не, ну если мы к чему-то относимся нейтрально, то обычно об этом не спорим и не дискутируем. Вот в вашем сообщении чувствуется обвинительный уклон, а нет, чтобы нейтрально подойти или каким-нибудь 358-м способом.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
27.11.2015, 11:18
Mr.X, не знаю что Вам чувствуется.
Цитата Сообщение от Mr.X Посмотреть сообщение
Вот в вашем сообщении чувствуется обвинительный уклон
На Вашу сферу чувств я влияния не имею. Да и нет у меня таких намерений, на Ваши чувства влиять. Вы не красна девица, чтоб мне ещё на этот счёт волноваться. В таких темах (как эта), я полагаю, люди общаются на уровне интеллектуальном, рациональном, логическом, а не на уровне эмоций. Более того, последнее чаще всего не приветствуется администрацией форума. Хотите аргументировать? Аргументируйте. Приводите код, цитаты из стандарта, из книг. А эмоции барышням оставьте.

Цитата Сообщение от Mr.X Посмотреть сообщение
если мы к чему-то относимся нейтрально, то обычно об этом не спорим и не дискутируем
Разумеется. Собственно, мне Ваша симпатия к STL импонирует и у меня в мыслях не было "защищать сишников". Но категоричность суждений для меня как красная тряпка для быка - меня это раздражает.
Моя позиция такова: есть старые сишные массивы, есть STL и классы типа valarray. Всему своё место и время. Это просто инструменты. Они не хорошие и не плохие. Где-то уместнее одни, где-то другие.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.11.2015, 11:18

Почему адреса элементов массива находятся в памяти не по порядку
Приветствую! Подскажите пожалуйста почему адреса элементов массива находятся в памяти не по порядку? почему и где происходит изменение...

Ошибка получения ip-адреса
Всем доброго времени суток) Возникла проблема, вот, собственно она: имеется стационарник с прямым подключением к интернету, к нему через...

Определить тип получения IP-адреса
Доброго дня. Подскажите пожалуйста: Необходимо определить, получен ли ip адрес по DHCP или прописан вручную. Надо парсить вывод команды...

Почему при редактировании ip-адреса NetworkManager создаёт второе соединение?
На Ubuntu Sevrer 16.04 LTS поставил NetworkManager. Включил его. Перезагрузил. Отредактировал ip-адрес. Перезагрузил. Смотрю, две...

Получения адреса объекта вызвавшего события
Всем доброго дня уважаемые форумчане. Ситуация в следующим, во время выполнения программы динамически создаются кнопке на форме...


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru