Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Способы передачи двухмерного массива в функцию. С примерами.




Массив - это набор однотипных данных, доступ к которым может быть осуществлен по индексу, т.е. по номеру элемента Функция -это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от процедуры, обязательно возвращает значение.. Двумерный массив - это так называемая матрица (или таблица), у которой есть строки и столбцы(это обычная таблица, со строками и столбцами).

1способ: Для правильного вычисления адреса нахождения элемента массива в памяти необходимо точно знать размер строки, то есть размер двухмерного массива.

#include "stdafx.h"

void f(int m[5][5]) {

int c=0;

for (int i=0;i<5;i++){

for (int j=0;j<5;j++){

printf ("adr=%d i=%d j=%d value=%d\n",&m[i][j],i,j,m[i][j]);

}

}

}

int _tmain(int argc, _TCHAR* argv[])

{

int M[5][5];

int c=0;

for (int i=0;i<5;i++){

for (int j=0;j<5;j++){

M[i][j]=++c;

}

}

f(M);

scanf(" ");

return 0;

}

2способ: Двумерный массив представляется в виде одномерного, а местоположения каждого элемента двумерного массива в одномерном определяется суммой номера столбца и произведения номера строки на длину строки. Способ индексации одинаков как в вызывающей функции, так и в вызываемых.

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#define MAXVAL 1000

void *Malloc (size_t size);

void RandomMatr (double *Matr, int n, int l);

void OutMatr (char *name, double *Matr, int n, int m);

void main(void)

{

size_t n = 5, m = 6;

double *A;/* Выделение памяти под матрицу */

A = (double *) Malloc(n*m*sizeof(double));/* Заполнение матрицы значениями и распечатка */

RandomMatr(A, n, m);

OutMatr("A", A, n, m);/* освобождение памяти */

free(A);

}

void RandomMatr (double *Matr, int n, int m)

{

int i, j;

for(i = 0; i < n; i++)

for(j = 0; j < m; j++)

Matr[i*m+j] = random(MAXVAL) + 1;

}

void OutMatr(char *name, double *Matr, int n, int m)

{

int i, j;

printf("\nМатрица %s\n---------------\n", name);

for(i = 0; i < n; i++)

{

for(j = 0; j < m; j++)

printf("%8.1lf ", Matr[i*m+j]);

printf("\n");

}

}

void * Malloc(size_t size)

{

void *p = malloc(size);

if(!p)

{ printf("Недостаточно памяти!\n"); exit(1); }

return p;

}






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных