Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
419 / 384 / 113
Регистрация: 21.09.2012
Сообщений: 913
1

Почему создатели языка C++ придумали такой странный синтаксис обращения к элементам одномерного массива?

20.12.2012, 17:21. Показов 1108. Ответов 7
Метки нет (Все метки)

К элементам массива можно обращаться разными способами. Обычно в квадратных скобках пишут номер элемента массива, а тут узнал что так же можно писать и имя самого массива. Но непонятно для чего все это сделано?
C++
1
2
3
4
int A[20];
 
A[10] = 0;
10[A] = 0;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.12.2012, 17:21
Ответы с готовыми решениями:

Ошибки обращения к элементам массива
// Симплекс метод.cpp: определяет точку входа для консольного приложения. // #include...

Способы обращения к элементам массива
Насколько мне известно, существуют два способа обращения к элементам массива: 1) С...

Почему итераторы в STL используют такой странный подход к индексации?
Здравствуйте. Вопросы касаются пока только последовательных контейнеров. Почему при...

Как производить все обращения к элементам массива с использованием указателей?
#include "stdafx.h" #include <iostream> #include <cstdlib> #include <ctime> #include...

7
25 / 36 / 10
Регистрация: 17.02.2009
Сообщений: 364
20.12.2012, 17:25 2
Лучший ответ Сообщение было отмечено как решение

Решение

Что бы вы задали обязательно вопрос здесь.
Думаю что для удобства.
2
What a waste!
1603 / 1297 / 178
Регистрация: 21.04.2012
Сообщений: 2,718
20.12.2012, 17:32 3
Насколько я знаю при индексации имя массива сначало неявно преобразуется в указатель на первый элемент, так что вопрос можно свести к тому, почему это разрешено для указателей)
1
3412 / 2771 / 751
Регистрация: 25.03.2012
Сообщений: 10,073
Записей в блоге: 1
20.12.2012, 17:32 4
я бы на их месте оставил бы синтаксис *(A+10)=0; И вопросов бы не возникало. Сразу видно, от перемены мест слагаемых результат не меняется.
А квадратные скобки - высокоуровневое излишество
1
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
20.12.2012, 17:37 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
А квадратные скобки - высокоуровневое излишество
Ну это же паскаль и не решётка, а язык как раз высокого уровня.

Добавлено через 1 минуту
Для указателей, кстати, не логично запрещать
C++
1
10+A
. Но одно дело сложение и совсем другое квадратные скобки.
1
What a waste!
1603 / 1297 / 178
Регистрация: 21.04.2012
Сообщений: 2,718
20.12.2012, 17:38 6
Вообще, уже обсуждалось, как минимум здесь: Почему работает и так, и так: arr[i] и i[arr]?.
1
419 / 384 / 113
Регистрация: 21.09.2012
Сообщений: 913
20.12.2012, 18:01  [ТС] 7
Цитата Сообщение от gray_fox Посмотреть сообщение
так что вопрос можно свести к тому, почему это разрешено для указателей)
Я вот тоже не пойму как это все работает и почему не возникают ошибки при компиляции

Добавлено через 21 минуту
gray_fox, спасибо за ссылку. Теперь понемногу начинаю понимать смысл всего этого
0
What a waste!
1603 / 1297 / 178
Регистрация: 21.04.2012
Сообщений: 2,718
20.12.2012, 18:25 8
Вообщем, я думаю суть такова:
A[10] => (&A[0])[10] => *(&A[0] + 10).
10[A] => 10[(&A[0])] => *(10 + &A[0]).

Добавлено через 5 минут
http://c-faq.com/aryptr/joke.html
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2012, 18:25

Написать программу, использующую для обращения к элементам массива указатели
Переписать данную программу, используя для обращения к элементам массива указатели Задача: из...

Как производить все обращения к элементам массива с использвованием указателей?
#include <time.h> #include <stdio.h> #include <math.h> #include <conio.h> #include <iostream>...

Как производить все обращения к элементам массива с использвованием указателей?
#include "stdafx.h" #include <iostream> #include <cmath> using namespace std; int main() ...


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

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

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