Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Передача массивов



C

Если аргумент процедуры – массив, то используется механизм передачи по адресу. При этом в список аргументов включается имя массива, в вызываемую процедуру передается адрес первого элементанулевыми индексами) и массив некопируется в локальную память функции. При описании float a[10][10] обращение вида: <имя_функции>(a) эквивалентно обращению: <имя_функции>(& a[0][0]). Следовательно, массивы-параметры занимают память, отводимую в вызывающей процедуре массивам-аргументам, поэтому в вызываемой процедуре допустимы описания вида float b[], a[][10]; Длины всех измерений, кроме первого, надо задавать, чтобы правильно извлечь из памяти значения нужного элемента массива (см. формулу в параграфе "Распределение массивов"). Допустимо даже несоответствие размерностей аргумента и параметра.

Пример.

Аргументы Параметры

float a[5][5], b[36]; float a[ ], b[ ][6];

Пример. Вычислить: z=uТbu, где {ui]}, i=1...4; {bij]}, i,j=1...4.

/* Вычисление квадратичной формы */

void main( void ){

float u[4], /* Входной вектор */

b[4][4], /* Входная матрица */

v[4], /* Вектор b*u */

z, /* Результат */

scalar( float u[ ], float v[ ]); /*Скалярное произведение векторов */

int i, j;

/* Умножение матрицы на вектор */

void matrix(float b[ ][4], float u[ ], float v[ ]);

printf("Исходный вектор:\n");

for (i=0; i<4; i++){

scanf("%f", & u[ i ]);

}

printf("Исходная матрица:\n");

for (i=0; i<4; i++){

for (j=0; j<4; j++){

scanf("%f", & b[ i ][ j ]);

}

}

matrix(b, u, v);

z=scalar(v, u);

printf("\n\n\nКвадратичная форма равна %.5g\n", z);

}/* End main */

/* Умножение матрицы на вектор */

void matrix(floa t a[ ][4], float x[ ], floa t y[ ]){

int i, j;

for (i=0; i<4; i++){

for (y[ i ]=j=0; j<4; j++){

y[ i ] += a[ i ][ j ]*x[ j ];

}

}

}/* End matrix */

/* Скалярное произведение векторов */

float scalar (float x[ ], float y[ ]){

int i;

float z;

for (z=i=0; i<4; i++){

z+=x[ i ]*y[ i ];

}

return z;

}/* End scalar */

Basic

Массивы передаются также по адресу, поэтому изменение их в вызывающей процедуре затруднений не вызывает.

Дальнейший материал относится только к языкам C и C++. В языке Basic подобных средств нет.





Дата публикования: 2014-11-02; Прочитано: 208 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...