Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/16: Рейтинг темы: голосов - 16, средняя оценка - 5.00
0 / 0 / 2
Регистрация: 25.09.2011
Сообщений: 49

Передача массива в функцию

12.10.2011, 15:29. Показов 3602. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
/*Дано несколько чисел. Ввод чисел производить в главной программе. В первой функции 
высчитать среднеарифметическое. Во второй находит минимальный и максимальный элемент. 
В третьей - считает среднеарифметическое между мин и макс элементом.*/
int sredn(int*);
const int n=5;
int i;
void main()
{
    int *x[n],sum;
    for(i=0; i<n; i++)
    {
        *x[i]=rand();
    }   
    sredn(&sum);
    printf("Crednearifmeti4eckoe=%d\n",sum);
}
int sredn(int* y[n])
{
    int sum=0;
    for(i=0; i<n; i++)
    {
        sum+=*y[i];
    }
    return sum;
}
Собственно вопрос заключается только в одном. Как из главной функции передать массив? Как это должно выглядеть?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2011, 15:29
Ответы с готовыми решениями:

Передача массива в функцию
Помогите раз и навсегда разобраться с проблемой передачи массива в функцию. Вот мой код, который создает массив и присваивает число...

Передача массива в функцию.
Здравствуйте) Не могли бы Вы мне помочь с такой задачей: напишите функцию с именем sumarray(), принимающую два массива в качестве...

Передача массива в функцию
Помогите пожалуйста, запутался... есть динамический массив: char *str = new char; как я его заполняю.. неважно далее мне нужно...

35
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.10.2011, 21:46
Студворк — интернет-сервис помощи студентам
Van111, в стандарте С++ говорится, что размер статического массива обязан быть константой, поскольку стандарт С++ основан на стандарте С89, в котором нет variadic-length arrays, в отличие от С99. Но мы вроде как о плюсах говорим, не?

Добавлено через 1 минуту
Цитата Сообщение от Van111 Посмотреть сообщение
если массив будет в пределе одного мегабайта можно и без константы
Пруф?
0
 Аватар для aeshes
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
12.10.2011, 21:48
Специально для Van111:
2
290 / 193 / 23
Регистрация: 03.08.2011
Сообщений: 2,824
Записей в блоге: 12
13.10.2011, 16:30
Цитата Сообщение от aeshes Посмотреть сообщение
Специально для Van111:
УУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУУ
А Я на MV C++ 6 и на dev 5 делал так и всё было ок
ну тогда получается и ты и я правы
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
13.10.2011, 17:38
Цитата Сообщение от Van111 Посмотреть сообщение
ну тогда получается и ты и я правы
Стандарт. Читаем стандарт до просветления.
0
 Аватар для nikola166
10 / 10 / 1
Регистрация: 18.03.2010
Сообщений: 142
13.10.2011, 18:51
не пробиваемый человек)))
0
 Аватар для KeyGen
388 / 295 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
13.10.2011, 19:12
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
/*Дано несколько чисел. Ввод чисел производить в главной программе. В первой функции 
высчитать среднеарифметическое. Во второй находит минимальный и максимальный элемент. 
В третьей - считает среднеарифметическое между мин и макс элементом.*/
int sredn(int*,int); //<-------------!!!!
const int n=5;
int i;
void main()
{
    int *x[n],sum;
    for(i=0; i<n; i++)
    {
        *x[i]=rand();
    }   
    sredn(sum, const); //<-------------!!!!
    printf("Crednearifmeti4eckoe=%d\n",sum);
}
int sredn(int* y,int n )//<-------------!!!!
{
    int sum=0;
    for(i=0; i<n; i++)
    {
        sum+=*y[i];
    }
    return sum;
}
Добавлено через 11 минут
Цитата Сообщение от KeyGen Посмотреть сообщение
sredn(sum, const); //<-------------!!!!
const в смысле размер;
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
13.10.2011, 19:16
KeyGen, это вообще что?
1
 Аватар для KeyGen
388 / 295 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
13.10.2011, 19:26
Извините #26 аннулирую ))
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
void F(int mass[], int k);
    
int main()
{
    setlocale(LC_ALL, "rus");
    
    int mass[5]={1,2,3,4,5};
    
    
    F(mass,5);
    
    
    
    cout << "\n\n\n";
    system("PAUSE");
    return 0;
}
 
void F(int mass[], int k){
     
     for (int i=0; i<k; i++)
     cout << mass[i];
     
     }
0
0 / 0 / 2
Регистрация: 25.09.2011
Сообщений: 49
17.10.2011, 12:59  [ТС]
очередной глупый вопрос
с одномерными массивами разобрался, а вот с двумерными не получается что-то
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
void vvod(int**,const int,const int);
void vivod(int**,const int,const int);
void main()
{
    const int m=5,n=5;
    int x[m][n];
    vvod(x,m,n);
    vivod(x,m,n);
}
void vvod(int**x,const int m=5,const int n=5)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            x[i][j]=1+rand()%10;
    }
}
void vivod(int **x,const int m=5,const int n=5)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%d\t",x[i][j]);
        printf("\n");
    }
}
что на этот раз не так делаю?)
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.10.2011, 16:07
Вы не можете таким образом передавать статические многомерные массивы, потому что они не являются массивами указателей. Так получится передать только динамические массивы.
0
0 / 0 / 2
Регистрация: 25.09.2011
Сообщений: 49
17.10.2011, 16:30  [ТС]
Цитата Сообщение от silent_1991 Посмотреть сообщение
Вы не можете таким образом передавать статические многомерные массивы, потому что они не являются массивами указателей. Так получится передать только динамические массивы.
а как подобное можно будет реализовать со статическими?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
17.10.2011, 17:08
Frequencies, явно указывать в заголовке функции все размерности, кроме первой. Т.е.
C++
1
void func(int *arr[10], int n);
принимает двумерный массив, второе измерение которого равно 10. Универсальность, соответственно, теряется (массив с 9 или 11 столбцами сюда уже не передать).
0
Заблокирован
17.10.2011, 17:36
Цитата Сообщение от silent_1991 Посмотреть сообщение
Frequencies, явно указывать в заголовке функции все размерности, кроме первой. Т.е.
C++
1
void func(int *arr[10], int n);
принимает двумерный массив, второе измерение которого равно 10. Универсальность, соответственно, теряется (массив с 9 или 11 столбцами сюда уже не передать).
Вы глубоко заблуждаетесь. Эта функция не принимает двумерный массив, как вы думаете, а принимает одномерный массив указателей!
0
0 / 0 / 2
Регистрация: 25.09.2011
Сообщений: 49
18.10.2011, 11:26  [ТС]
Цитата Сообщение от silent_1991 Посмотреть сообщение
Frequencies, явно указывать в заголовке функции все размерности, кроме первой. Т.е.
C++
1
void func(int *arr[10], int n);
принимает двумерный массив, второе измерение которого равно 10. Универсальность, соответственно, теряется (массив с 9 или 11 столбцами сюда уже не передать).
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
void vvod(int**,const int,const int);
void vivod(int**,const int,const int);
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    const int m=5,n=5;
    int x[m][n],i;
    int **matrix=new int*[n];
    for(i=0;i<n;i++)
        matrix[i]=new int[n];
    vvod(matrix,m,n);
    vivod(matrix,m,n);
}
void vvod(int**x,const int m=5,const int n=5)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            x[i][j]=rand();
    }
}
void vivod(int **x,const int m=5,const int n=5)
{
    int i,j;
    printf("Массив:\n");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
            printf("%d\t",x[i][j]);
        printf("\n");
    }
}
Я так понял, что так тоже можно?
если да, то объясните на пальца, что значит
C
1
int **matrix=new int*[n];
0
Кошковед
 Аватар для co6ak
521 / 509 / 63
Регистрация: 12.04.2010
Сообщений: 1,390
18.10.2011, 11:34
Frequencies, нажми меня
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
18.10.2011, 13:06
Сыроежка, хм, действительно, странно, что меня никто сразу не поправил. Чтобы функция приняла массив, объявленный как
C++
1
int a[10][10];
, сигнатура функции должна быть такой:
C++
1
void func(int (*a)[10]);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.10.2011, 13:06

Передача массива в функцию
В массиве char размера n хранятся символы 16-ричной СС. Как передать этот массив в функцию, чтобы в ней потом перевести число, хранящееся в...

Передача массива в функцию
Написал программу, я использовал глобальный массив а мне нужно в функцию передать массив используя адреса или ссылки, я не понимаю как это...

Передача массива в функцию
Что я делаю не так? Как конкретно передавать массив в функцию? #include &lt;stdio.h&gt; #define MAS 4999 int MINIM(int *S) { int K; ...

Передача массива в функцию
Здравствуйте. Код читает матрицу из файла и записывает ее в динамический массив и выводит на экран. У меня проблема) не могу понять откуда...

Передача массива в функцию
В общем задание такое Превратить этот код в другой код, что-то поменять, я не врубаюсь что и как. Тема называется передача массива в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru