Непейвода Н.Н. Программирование. Раздел 3

Непейвода Н.Н. Программирование. Страница 338

#include<stdio.h> #include<stdlib.h>constNN = 100; typedeffloatMatrix[NN][NN];

При условии корректности ввода в результате выполнения этих операто­ров переменная N получит значение размера матрицы Ма^ по измерениям, в массиве Ма^ будет заполнен левый верхний угол размера 10 на 10, а в масси­ве Ма^1 — угол размера 5 на 5 (для Ма^1 переменная, фиксирующая размер матрицы, не предусмотрена). Это логический взгляд на структуру данных. На уровне модели вычислений языка С/С++ все выглядит несколько иначе. Никаких "верхних углов" матрицы не существует. Вместо матрицы рассмат­ривается вектор указателей (например, Ма1г[1] для каждого 0, ссылающихся

на векторы вещественных значений. Именно этого требует стандарт языка, и не случайно, что выражение

является эквивалентным следующему фрагменту, явно отражающему опе­рирование с указателями:

Следует отметить, что в языке Pascalлогический взгляд на обсуждаемую структуру данных вполне правомерно представлять себе и как реализаци­онный, можно даже не задумываться над представлением матриц в памяти (разумеется, квалифицированный программист это всегда знает, а потому использует, и именно этим обстоятельством обычно аргументируют адеп­ты языка С отход от традиций абстрактного рассмотрения представлений структур данных).

В языке Pascalзаголовок процедуры MyOwnlnpMatrможет быть пред­ставлен следующим образом:

Здесь явно обозначены различные механизмы, использованные для первого и второго параметров. Это становится возможным изза того, что описание массива в языке Pascalне привязывается к реализации доступа к его элемен­там, имя переменной типа массив действительно обозначает совокупность 'переменных с индексами', и не требуется прибегать к понятию памяти для уточнения семантики данных понятий. В результате в языке PascalMatrи Matrlобозначают значения массивов, тогда как в С/С++/С# — адреса памя­ти для размещения значений. Именно поэтому внешне схожие изображения двух указанных формальных параметров в С/С++/С# на логическом уровне рассмотрения приводят к двум разным механизмам параметризации. В дей­ствительности здесь нет противоречий, поскольку первый аргумент функции передается по значению (именно так, как и второй аргумент), но передава­емое значение есть ссылка в данном случае на массив, и все оказывается в точности так, как в Pascal.

Новости

  • 1
  • 2
Prev Next

Ракета "Ангара-А5В" в ближайшее десятилетие не полетит

24.01.2016

Ракета &quot;Ангара-А5В&quot; в ближайшее десятилетие не полетит

Роскосмос не планирует в течение ближайшего десятилетия осуществлять пуск тяжёлой ракеты-носителя А...

Ученые РФ опровергли выводы исследований о вреде ГМО

24.01.2016

Ученые РФ опровергли выводы исследований о вреде ГМО

Исследователи из Института проблем передачи информации (ИППИ РАН) проанализировали несколько самых п...

Летающие "Крокодилы"

24.01.2016

Летающие &quot;Крокодилы&quot;

20 удивительных фактов о боевом вертолете Ми-24.Этот вертолет стал таким же узнаваемым символом сове...

В Аргентине описали новый вид динозавра-гиганта

24.01.2016

О ранее неизвестном виде динозавра, относящемуся к инфраотряду зауроподов, рассказали аргентинские п...

Реклама