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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ В каждом столбце динамической матрицы поменять местами первый отрицательный элемент и последний нулевой http://www.cyberforum.ru/cpp-beginners/thread1589538.html
Написать программу в динамическом двумерном массиве: В каждом столбце двумерного массива поменять местами первый отрицательный элемент и последний нулевой.
C++ Перемножить двумерные массивы Написать программу в двумерном динамическом массиве: Даны два двумерных массива. Перемножить их как матрицы. Результат записать в третий массив. http://www.cyberforum.ru/cpp-beginners/thread1589535.html
C++ Найти наибольшее количество идущих подряд букв в тексте
Добрый вечер помогите пожалуйста Дан текст найти наибольшее количество идущих подряд букв
ООП: указатель на объект C++
Всем привет. Подскажите пожалуйста как сделать указатель (набор дочерних тематических блоков (указатели на объекты Topic)).Читал про unique_ptr но через него у меня не получается. Само задание:...
C++ Найти индекс максимального элемента массива http://www.cyberforum.ru/cpp-beginners/thread1589516.html
Добрый вечер помогите пожалуйста в одномерном массиве состоящем из n целых элементов вычислить номер максимального элемента массива
C++ Вычислить площадь трапеции c использованием динамических массивов Вычислить площадь трапеции. Написать программу с использованием динамических массивов, вводя размер массива с клавиатуры. подробнее

Показать сообщение отдельно
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,677
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
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru