|
передача ссылки и указателя в функцию.
|
|||
---|---|---|---|
#18+
Добрый день всем. объясните мне , пожалуйста. не могу догнать такую простую вещь )))) вопрос по семантике или по синтаксису что ли . итак , вот такая конструкция объявление динамического массива int* arrtmp = new int[N]; То есть слева мы создаём статическую переменную типа указатель на интовое число. А вот справа интереснее )) могу предположить , что справа мы резервируем динамическую память под идущие подряд - а может и нет (что подряд это предполагаю так что может и не подряд) в памяти интовые числа в количестве N штук. вся строка в результате означает , что в переменной arrtmp у нас содержится указатель на область памяти где хранится первый элемент массива с индексом 0. Если есть огрехи в понимании , то поправьте, а если нет , то собственно проблема вот в чем : а вот теперь объясните мне , пожалуйста, вот эту конструкцию : arr[0] = 100; arr[1] = 200; вот глупость , но по наитию arr это обычная переменная содержащая указатель на int . как тут можно указывать квадратные скобочки словно это массив ? более того где разименование ? а ещё справедливо следующее: Код: plaintext 1. 2.
может быть кто-нибудь объяснит логику семантики/синтаксиса С++ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 21:10 |
|
передача ссылки и указателя в функцию.
|
|||
---|---|---|---|
#18+
andron81, извиняюсь, тема должна называться "объявление динамического массива" . но исправить форум не даёт ( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 21:12 |
|
передача ссылки и указателя в функцию.
|
|||
---|---|---|---|
#18+
andron81 резервируем динамическую память под идущие подряд - а может и нет (что подряд это предполагаю так что может и не подряд) Строго подряд. andron81 как тут можно указывать квадратные скобочки словно это массив ? более того где разименование ? По стандарту (С и С++), выражение x[y] эквивалентно выражению *(x + y). Вот вам и разыменование. По этой же причине вы можете даже написать по приколу так 0[arr] = 100 (но не стоит:)) Далее, массив при передаче его в функцию или при использовании в выражении с адресной арифментикой (как в этом примере с x+y), производится неявное преобразование его в указатель на его 0-й элемент. Поэтому выражение x[y] допустимо как с массивом так и с указателем Ну и последнее, new int создает один объект. Но ничего не мешает его рассматривать как массив из одного элемента. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 21:57 |
|
передача ссылки и указателя в функцию.
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky andron81 резервируем динамическую память под идущие подряд - а может и нет (что подряд это предполагаю так что может и не подряд) Строго подряд. andron81 как тут можно указывать квадратные скобочки словно это массив ? более того где разименование ? По стандарту (С и С++), выражение x[y] эквивалентно выражению *(x + y). Вот вам и разыменование. По этой же причине вы можете даже написать по приколу так 0[arr] = 100 (но не стоит:)) Далее, массив при передаче его в функцию или при использовании в выражении с адресной арифментикой (как в этом примере с x+y), производится неявное преобразование его в указатель на его 0-й элемент. Поэтому выражение x[y] допустимо как с массивом так и с указателем Ну и последнее, new int создает один объект. Но ничего не мешает его рассматривать как массив из одного элемента. спасибо большое ... |
|||
:
Нравится:
Не нравится:
|
|||
19.02.2020, 22:08 |
|
|
start [/forum/topic.php?fid=57&gotonew=1&tid=2017468]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get first new msg: |
7ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 150ms |
0 / 0 |