Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Как передать массив в функцию? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Найти элементы, которые по модулю меньше некоторого значения, введенного с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread443118.html
задано матрицу размерностью N * M с произвольным многочисленных элементов. Найти элементы, которые по модулю меньше некоторого значения, введенного с клавиатуры Помогите плис срочно надо прога
C++ Напечатать все слова, которые состоят из тех же букв что и последнее слово текста Прог на c++ дан текст,который заканчивается точкой.текст состоит из слов,разделенных пробелами,слова представляют собой произвольную последовательность символов,отличных от пробела .напечатать все... http://www.cyberforum.ru/cpp-beginners/thread443098.html
C++ задание по членам..valarray
10. (*3) Реализуйте Matrix, используя для представления элементов члены valarray (а не указатель или ссылку на valarray). кто что думает. я так понял нужна 2х мерная матрица, но увы незя в...
C++ Задачи на массивы С++
1)решить двумя способоми, сначала используя одномерный массив а потом двумерный.( и только с помощьюь массивов,никак по другому) Задача:Дана последовательность целых чисел. Подсчитать среднее...
C++ вывести минимальное значение http://www.cyberforum.ru/cpp-beginners/thread443047.html
Из величин? определяемых выражением а=sinx, b=cosx, c=ln|x|.ПРи заданном х, ввывестти на экран дисплея минимальное значение!
C++ Снятие экрана сервера и отправка его клиенту. Привет всем. Я пишу на VC++2010. Пишу только консольные приложения. По учебе дали написать прогу клиент-сервер, которая должна по запросу клиента делать как бы фотоснимки экрана сервера и... подробнее

Показать сообщение отдельно
IFree Host
Заблокирован
08.02.2012, 22:26
Пример предачи массива char в функцию двумя вариантами

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "stdafx.h"
#include "string.h"
 
// здесь массив передется по указателю
void getIt1(char * str) 
{ 
 char c_Word[255];
 strcpy (c_Word, str); 
 printf("%s - ist gespeichert", c_Word);
}
 
// здесь массив передется по линку
 
void getIt2(char (&str)[255]) 
{ 
 printf("%s - ist gespeichert\n", str);
}
 
void main()
{
 char c_Wort[255],
 c_Copy[255];
 
 scanf("%s", c_Wort);
 fflush(stdin);
 
// а используются оба одинаково
 getIt1(c_Wort);
 getIt2(c_Wort);
 
 printf("angenommen");
 getchar();
 
}
Передача массива произвольного размера в функцию


Это можно сделать несколькими способами:

1. Использовать шаблоны. В таком случае заголовок функции будет выглядеть как
template <int N> void trans (int (&matrix)[N][N]) // передача матрицы по ссылке

Использование:
int m[5][5];
trans(m);

2. Использовать массив указателей на массивы:
void trans (int **matrix, int n)

Использование:
1) Вариант 1 (статическое распределение памяти):
int m1[5][5];
int* m[] = {m1[0], m1[1], m1[2], m1[3], m1[4]};
trans(m, 5);
2) Вариант 2 (динамическое распределение памяти):
int** m = new int*[5];
for (int i=0; i<5; i++)
m[i] = new int[5];
trans(m, 5);

3. Использовать STL:
#include <vector>
typedef std::vector<int> row;
typedef std::vector<row> matrix;
void trans(matrix& mat);

Использование:
matrix m(5, row(5));
trans(m);

------------------------------------------------

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

PS Первый и второй методы можно объединить:
void trans (int **matrix, int n)

template <int N> inline void trans (int (&matrix)[N][N])
{
int *m[N];
for (int i=0; i<N; i++)
m[i] = matrix[i];
trans(m, N);
}

Здесь основная логика реализуется в функции, написанной по первому методу, но имеется также удобная шаблонная функция-обертка для статических матриц.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru