Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вывести в новый файл список студентов, удалив из него студентов окончивших школу в текущем году. https://www.cyberforum.ru/ cpp-beginners/ thread1239489.html
На основе данных входного файла составить список студентов группы, включив следующие данные: ФИО, год рождения, домашний адрес, какую школу окончил. Вывести в новый файл список студентов, удалив из него студентов окончивших школу в текущем году. Прошу помогите, понятным языком, желательно весь код, потому что я только учусь и могу не правильно понять отрывки. Заранее спасибо. выполнить с...
Приписать значок € C++
Вот код программы: #include <iostream> int main() { double a=0, b=0, c=0; std::cout << " Enter the width of the picture "; std::cin >> a; std::cout << " Enter the length of the picture "; std::cin >> b; c =a*b*0.00406;
C++ Функция для вывода числа с заданной точностью Вот то, что придумал, но выводит число, как оно было введено. Возможно setprecision так не работает? /* 2.Написать функцию, которая принимает в качестве параметров вещественное число и количество знаков после десятичной точки, которые должны остаться. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью */ #include<iostream> #include<iomanip>... https://www.cyberforum.ru/ cpp-beginners/ thread1239468.html C++ Своя иконка для приложения Как загрузить свою иконку в програму? https://www.cyberforum.ru/ cpp-beginners/ thread1239458.html
C++ Переписать визуальный проект в консольное приложение: Обход конем всех клеток шахматного поля.
Приветствую друзья!Прошу помощи у экспертов, т.к. ООП почти не изучал. Дана программа с исходниками и исполняемым файлом, рабочая, но с объектами на форме. Требуется перевести её в исполняемый файл командной строки! Задание и файлы во вложении. Заранее спасибо...
C++ Как сделать в приложении С++ русский язык? Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Мне 11 лет, и я учусь программировать на С++. В своих программах я вынужден писать по-английски, потому-что если писать по-русски получаются какие-то каракули! Подскажите, пожалуйста, как сделать так, чтобы в прилжениях С++ был русский язык, а не каракули. Заранее благодарю! https://www.cyberforum.ru/ cpp-beginners/ thread1239438.html
C++ Найти определитель матрицы, с помощью разложения её по строке https://www.cyberforum.ru/ cpp-beginners/ thread1239385.html
Помогите написать программу , в которой нужно найти определитель матрицы , с помощью разложения её по строке. В исходнике все расскладывает правильно, но ответ почему то неверный. #include "iostream" int det(int mas, int n,int t) { int i, j, k, m, l, s = 0 , b = 0 , p=0, d; if (n < 3) {
C++ Как можно совершить обход двоичного дерева нерекурсивно
Доброго времени суток. Хочу поинтересоваться: как можно совершить обход двоичного дерева нерекурсивно(!!!), желательно с примерами или полезными ссылками. Спасибо
C++ Инициализация вектора у меня в классе есть vector из string (константный, просто строки нужны как образец для других функций), в конструкторе соответственно надо это дело как то проинициализировать... вообще можно наверное и просто массив строк сделать, только мне кажется это еще геморнее... https://www.cyberforum.ru/ cpp-beginners/ thread1239350.html C++ Помогите сделать обход двоичного дерева Есть некий проект (большой, несколько файлов), где происходит процессы со списком (добавление, удаление и т. д.). Структура: /** * Структура list_node описывает элемент списка */ typedef struct l_node{ void *data; // Указатель на данные l_node *next; // Указатель на следующий элемент } list_node; https://www.cyberforum.ru/ cpp-beginners/ thread1239348.html
Алгоритм рекурсивного спуска C++
подскажите что почитать про этот алгоритм? хочу реализовать парсер математических выражений (без переменных, но с функциями типа sin, cos...), пишу на c++ а то в гугле все примеры на других языках =(
C++ Векторы. Дана последовательность целых чисел. Заменить все четные элементы на Х Дана последовательность целых чисел. Заменить все четные элементы на Х. Помогите пожалуйста, сам изучаю язык что бы перевестись в другую группу и не у кого спросить. где ошибка ? #include <iostream> #include <vector> #include <algorithm> using namespace std; bool pred(int x) {bool e; if(x%2==0) e=true; else https://www.cyberforum.ru/ cpp-beginners/ thread1239298.html
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
07.08.2014, 19:48 0

Передача массива в функцию в качестве параметра - C++ - Ответ 6498972

07.08.2014, 19:48. Показов 1422. Ответов 12
Метки (Все метки)

Ответ

Цитата Сообщение от takhvatulin Посмотреть сообщение
Да? А почему у меня получилось?) Или Вы не знаете что такое параметры функции?
У Вас получилось в качестве параметра функии передавать указатель, а не массив.

Пруф:
Кликните здесь для просмотра всего текста

Цитата Сообщение от Стивен Прата
Функции и двумерные массивы

При написании функции, которая принимает в качестве аргумента двумерный
массив, необходимо помнить, что имя массива трактуется как его адрес, поэтому
соответствующий формальный параметр является указателем
— так же, как и в случае
одномерного массива. Сложность заключается в том, чтобы правильно объявить
указатель. Предположим, например, что вы начинаете с такого кода:
int data[3][4] = {{1,2,3,4}, {9,8,7,6}, {2,4,6,8}};
int total = sum(data, 3);
Как должен выглядеть прототип sum () ? И почему функция передает количество
строк (3), но не передает количество столбцов (4)?
Итак, data — имя массива из трех элементов. Первый элемент сам по себе является
массивом их четырех значений типа int. To есть тип data — это указатель на массив
из четырех int, поэтому соответствующий прототип должен быть таким:
int sum(int (*ar2)[4], int size);
Скобки необходимы, потому что показанное ниже объявление определило бы
массив их четырех указателей на int вместо одного указателя на массив из четырех int,
а параметр функции не может быть массивом:
int *ar2[4]
Существует альтернативный формат, который означает в точности то же самое,
что и первый прототип, но, возможно, является более простым для чтения:
int sum(int ar2[][4], int size);
И тот, и другой прототип устанавливает, что аr2 — указатель, а не массив. Также
обратите внимание, что тип указателя явно говорит о том, что он указывает на массив
из четырех int. Таким образом, тип указателя задает количество столбцов — вот
почему количество столбцов не передается в отдельном аргументе функции.
Поскольку тип указателя задает количество столбцов, функция sum () работает
только с массивами из четырех столбцов. Однако количество строк задается
переменной size, поэтому sum() может работать с произвольным количеством строк:
int а[100][4];
int b[6][4];
...
int total1 = sum(a, 100); // сумма всех элементов а
int total2 = sum(b, 6); // сумма всех элементов b
int total3 = sum(a, 10); // сумма первых 10 строк а
int total4 = sum(a+10, 20); // сумма следующих 20 строк а
Зная, что аr2 — указатель на массив, как его можно использовать в определении
функции? Простейший способ — работать с аr2 как с именем двумерного массива.
Вот возможный вариант определения функции:
C++
1
2
3
4
5
6
7
8
int sum(int ar2[][4], int size) 
{ 
int total = 0; 
for (int r = 0; r < size; r++) 
for (int с = 0; с < 4; C++) 
total += ar2[r][c] ; 
return total; 
}
Еще раз обратите внимание, что количество строк передается в параметре size,
но количество столбцов является фиксированным и равно 4, как в объявлении аr2,
так и во вложенном цикле.
Вот почему можно использовать нотацию массивов. Поскольку аr2 указывает на
первый элемент (элемент 0) массива, элементы которого являются массивами из четырех
int, то выражение аr2+r указывает на элемент номер r. Таким образом, аr2[r] — это
элемент номер r. Этот элемент сам по себе является массивом из четырех int, поэтому
аr2[r] — имя этого массива из четырех int. Применение индекса к имени массива дает
нам его элемент, поэтому аr2[r][с] — элемент массива из четырех int, т.е. отдельное
значение типа int. Для получения данных указатель аr2 должен быть разыменован
дважды. Простейший способ сделать это — дважды использовать квадратные скобки,
как в аr2[r][с]. Если это неудобно, можно два раза применить операцию *:
C++
1
аr2[r][с] == *(*(аr2 + r) + с)  // одно и то же
Чтобы понять это, понадобится разобрать выражение по частям, начав изнутри:
C++
1
2
3
4
5
6
7
ar2                 // указатель на первую строку — массив из 4 int 
ar2 + r             // указатель на строку r (массив из 4 int) 
*(ar2 + r)          // строка r (массив из 4 int, следовательно, имя массива, 
                    // таким образом, указатель на первый int в строке, т.е. ar2[2])
*(ar2 + r) + c      // указатель на элемент int под номером с в строке r, 
                    // т.е. аr2[r] + с 
*(*(аr2 + r) + с    // значение int под номером с в строке r, т.е. аr2[r][с]


Вернуться к обсуждению:
Передача массива в функцию в качестве параметра C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2014, 19:48
Готовые ответы и решения:

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

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

Передача файла в функцию в качестве параметра
Здравствуйте! Подскажите, как передать файловый поток в функцию? int main() { ifstream...

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

12
07.08.2014, 19:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2014, 19:48
Помогаю со студенческими работами здесь

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

Функции, передача массива в качестве параметра
Приветствую) Собственно, есть простенькое задание с двумерными массивами, оно выполнено: ...

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

Передача двумерного массива указателей на char в качестве параметра функции
Есть массив char *result2; Нужно передать его в функцию void defDouble(???) в качестве одного из...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru