Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
javay
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 101
1

Чем является имя статического массива?

08.11.2016, 21:02. Просмотров 1049. Ответов 5
Метки нет (Все метки)

Всем доброго дня!
Имя массива-это иными словами указатель на нулевой элемент участка памяти.
Указатель как мы знаем имеет значение(адрес на то что он указывает) и свой адрес по которому мы обращаемся к нему...
Любая переменная или участок памяти выделенный динамически имеют также значение и свой адрес по которому мы их вызываем...
"Так вот,имеется имя статического массива(указатель как я вычитал) значение которого указывает на участок памяти(номер байта в котором записано значение)" - в этом я не уверен,то почему же если мы возвращаем адрес нашего указателя(имя массива),то он возвращает нам адрес нулевого элемента массива???

P.s Если мы создадим динамический массив то адрес указателя и адрес нулевого элемента будут разными.
Может быть имя статического массива и динамического это разные вещи?

Просто прошу помощи,уже сломал голову
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2016, 21:02
Ответы с готовыми решениями:

В чем ошибка при передачи статического массива в функцию
Не кидайте камни за использование глобальных переменных и статических двумерных массивов. Вроде...

Ввести массив строк фамилию, имя и отчество. Нужно определить, какое имя является родным
Ввести массив строк, в каждой из которых через символ пропуска заданные фамилия, имя и отчество...

Обнуление статического массива
Нужна помощь с обнулением массива,который записан в файл и выведен на экран Надо его обнулить и...

Инициализация статического массива
Ребята, помогите пожалуйста. Не получается проинициализировать NULL-ами статиеский массив...

Из статического массива в динамический
Здравствуйте . Помогите , пожалуйста , переделать эту программу(сортировку) , чтобы она работала с...

5
IchimaruGin
79 / 79 / 44
Регистрация: 14.07.2013
Сообщений: 401
Завершенные тесты: 1
08.11.2016, 21:12 2
массив это фиксированный участок памяти, а указатель может указывать на разные участки.
с указателем можна сделать что то типа такого:
C++
1
2
3
4
int a[] = {1,2,3,4,5,6,7,8,9,10};
int *i = a;
i++;
cout << *i << endl;// вывод второго элемента массива а
а с массивом так не получится. тоесть мы не можемнаписать так
C++
1
2
3
int a[] = {1,2,3,4,5,6,7,8,9,10};
a++; // ошибка
cout << *a << endl;
Добавлено через 4 минуты
а когда указателю присваивается массив то он получает адрес первого элемента. массив это непрерывный блок памяти поэтому если инкрементировать указатель он будет указывать на следующий элемент массива
1
GbaLog-
Любитель чаепитий
3203 / 1504 / 472
Регистрация: 24.08.2014
Сообщений: 5,273
Записей в блоге: 1
Завершенные тесты: 2
08.11.2016, 21:13 3
Потому что адрес указателя - это адрес указателя.
Указатель лишь указывает, он не есть значение по этому адресу.
Код
0x0000007
ptr*--┐
      ↓_ _ _ _ _ _
arr   |1|2|3|4|5|6|
       | | | | | └ 0x00000006
       | | | | └ 0x00000005
       | | | └ 0x00000004
       | | └ 0x00000003
       | └ 0x00000002
       └ 0x00000001
Вам при взятии адреса указателя выдаёт адрес указателя( 0x0000007 ), а при взятии адреса первого элемента выдает, как ни странно, адрес первого элемента( 0x00000001 ).
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5765 / 2767 / 757
Регистрация: 18.10.2014
Сообщений: 4,972
08.11.2016, 21:43 4
Лучший ответ Сообщение было отмечено GbaLog- как решение

Решение

Цитата Сообщение от javay Посмотреть сообщение
Имя массива-это иными словами указатель на нулевой элемент участка памяти.
Нет, ни в коем случае. Имя массива - это имя массива. Это имя объекта в памяти, тип которого - "массив". Имя массива ничем по своей сути не отличается от имени переменной любого другого типа. Например, в случае char a[40]; имя a напрямую связано с непрерывным блоком памяти размером в 40 байт.

Цитата Сообщение от javay Посмотреть сообщение
Указатель как мы знаем имеет значение(адрес на то что он указывает) и свой адрес по которому мы обращаемся к нему...
"Свой адрес" имеют только lvalues, т.е. объекты, хранящиеся в памяти. Термин "указатель" может ссылаться как на lvalue (т.е. переменную) типа "указатель", которая действительно имеет свой адрес в памяти, так и на rvalue типа "указатель", которое своего адреса в памяти не имеет.

Например, int i = 42; &i + 1;. Значение выражения &i + 1 - это указатель, но своего адреса в памяти он не имеет.

Цитата Сообщение от javay Посмотреть сообщение
Любая переменная или участок памяти выделенный динамически имеют также значение и свой адрес по которому мы их вызываем...
Да, это так.

Цитата Сообщение от javay Посмотреть сообщение
"Так вот,имеется имя статического массива(указатель как я вычитал) значение которого указывает на участок памяти(номер байта в котором записано значение)" -
Неправильно вычитал. Никакого "указателя, значение которого указывает..." не существует. Имя массива ассоциировано напрямую с блоком памяти, представляющим массив. И через имя массива обращаемся мы всегда именно к этому блоку памяти.

Цитата Сообщение от javay Посмотреть сообщение
то почему же если мы возвращаем адрес нашего указателя(имя массива),то он возвращает нам адрес нулевого элемента массива???
Имя массива ассоциировано напрямую с блоком памяти, представляющим массив. Понятно, что начало этого блока памяти совпадает с расположением в памяти нулевого элемента массива. Потому численно адрес всего массива совпадает с адресом его нулевого элемента.

Цитата Сообщение от javay Посмотреть сообщение
P.s Если мы создадим динамический массив то адрес указателя и адрес нулевого элемента будут разными.
Это если мы создадим динамический массив и, дополнительно, создадим указатель, указывающий на этот динамический массив. В этом случае мы явно создаем отдельную переменную типа "указатель", которая указывает на начало нашего массива. Это - отдельная переменная. Она не имеет никакого отношения к самому массиву. У нее, разумеется, будет свое положение в памяти и свой адрес.

Цитата Сообщение от javay Посмотреть сообщение
Может быть имя статического массива и динамического это разные вещи?
Что такое "имя динамического массива"? У объектов в динамической памяти нет и не может быть никаких имен. Все объекты в динамической памяти всегда безымянны.
1
javay
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 101
08.11.2016, 21:55  [ТС] 5
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"Свой адрес" имеют только lvalues,
Тогда что такое указатель на указатель,и на что он указывает?
0
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
5765 / 2767 / 757
Регистрация: 18.10.2014
Сообщений: 4,972
08.11.2016, 22:07 6
Цитата Сообщение от javay Посмотреть сообщение
Тогда что такое указатель на указатель,и на что он указывает?
Не понимаю связи данного вопроса с темой.

"Указатель на указатель" - это указатель, который указывает на другой указатель. Понятно, что тот указатель, на который указывают, обязан располагаться в памяти, то есть быть lvalue.
0
08.11.2016, 22:07
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2016, 22:07

Инициализация статического массива
Добрый вечер! Допустим, что имеется класс class A { .... public: static int array; .... };...

Размер статического массива
Можно ли задавть размер статического массива во время работы программы? Если нет, то...

Максимальная размерность статического массива
Добрый день! У меня появилась проблема. Мне по ходу курсового проекта нужно заводить двумерные...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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