Когда параметром является двумерный массив, его вторая размерность обязательно указывается в объявлении функции
float a[ ][4].
Объявление параметра как float a[ ][ ] недопустимо.
Нет ничего странного в том, что компилятору требуется вторая размерность, ведь именно она определяет размер тех одномерных массивов, которые составляют двумерный.
Пример. Определить функцию, которая распечатывает двумерный массив а[3][4] в виде матрицы.
void print (float a[] [4], int size1)
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < 4; j++)
cout « a[i][j] « " ";
cout « endl;
}
}
Заголовок функции в предыдущем примере мог быть и таким:
void print (float (*a)[4], int size1)
Параметр a здесь является указателем на одномерный массив из четырех вещественных чисел.
Если вам не нравится передавать в функцию двумерные массивы, можно передать двумерный массив как одномерный, и в теле функции вычислять местоположение элемента.
void print1(float a[], int size1, int size2)
{
for (int i = 0; i < size1; i++)
{
for (int j = 0; j < size2; j++)
cout « a[i * size2 + j] « " ";
cout « endl ;
}
}
Чтобы правильно вызвать эту функцию, надо передать ей в первом параметре адрес не двумерного массива m, а одномерного *m, иными словами не float**, а просто float*.
float m[] [4] = {{11, 12, 13, 14},
{21, 22, 23, 24},
{31, 32, 33, 34}};
print1(*m, 3, 4);
Этого же можно добиться явным приведением типа.
print1((float*)m, 3, 4);
Источник: www.cplus-plus.ru
Добро пожаловать в блог официального сайта www.cplus-plus.ru
Все представленные материалы в этом блоге находятся по адрусу www.cplus-plus.ru
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!
Поиск по этому блогу
Каталог статей
четверг, 28 октября 2010 г.
среда, 27 октября 2010 г.
Одномерный массив в C++ как параметр
Чтобы передать массив в функцию, ей надо сообщить адрес начала массива и количество его элементов. Это можно сделать при помощи двух параметров.
Пример. Определить функцию, которая возвращает сумму всех элементов массива.
float sum (float а[], int n)
{
float s = 0;
for (int i = 0; i < n; i++)
s += a[i] ;
return s;
}
Задать указатель на начальный элемент можно по-разному. Следующие два заголовка равносильны заголовку функции из предыдущего примера:
float sum(float *a, int n);
float sum(float a[1000], int n);
Замечание. Поскольку C++ не предусматривает проверку выхода за границу массива во время выполнения программы, компилятор просто игнорирует константу в квадратных скобках в параметре-массиве.
Рассмотренный способ передавать массив в функцию не единственный. Можно, например, сделать это при помощи двух указателей — на первый и на последний элемент массива.
float sum (float *begin, float *end);
Впрочем, для программиста удобнее, если второй параметр указывает не на последний элемент массива, а на «элемент», следующий за последним.
float sum (float *begin, float *end)
{
float s = 0;
while (begin != end)
s += *(begin++);
return s;
}
...
float m[100] = {1,2};
cout « sum(m, m + 100) « endl;
Источник: http://www.cplus-plus.ru
Пример. Определить функцию, которая возвращает сумму всех элементов массива.
float sum (float а[], int n)
{
float s = 0;
for (int i = 0; i < n; i++)
s += a[i] ;
return s;
}
Задать указатель на начальный элемент можно по-разному. Следующие два заголовка равносильны заголовку функции из предыдущего примера:
float sum(float *a, int n);
float sum(float a[1000], int n);
Замечание. Поскольку C++ не предусматривает проверку выхода за границу массива во время выполнения программы, компилятор просто игнорирует константу в квадратных скобках в параметре-массиве.
Рассмотренный способ передавать массив в функцию не единственный. Можно, например, сделать это при помощи двух указателей — на первый и на последний элемент массива.
float sum (float *begin, float *end);
Впрочем, для программиста удобнее, если второй параметр указывает не на последний элемент массива, а на «элемент», следующий за последним.
float sum (float *begin, float *end)
{
float s = 0;
while (begin != end)
s += *(begin++);
return s;
}
...
float m[100] = {1,2};
cout « sum(m, m + 100) « endl;
Источник: http://www.cplus-plus.ru
вторник, 26 октября 2010 г.
C++. Возврат ссылки
Функция может не только принимать параметры-ссылки, но и возвращать ссылку в программу.
Пример. Определение функции, которая возвращает ссыл¬ку на больший из двух аргументов.
int& refmax(int &а, int &b)
{
if (a >= b)
return a;
else
return b;
}
Пример. Определение функции, которая возвращает ссыл¬ку на больший из двух аргументов.
int& refmax(int &а, int &b)
{
if (a >= b)
return a;
else
return b;
}
понедельник, 25 октября 2010 г.
Ссылки в C++
Как видно из предыдущего примера, для работы внутри функции с выходным параметром необходимо:
а) в вызывающей программе получить адреса переменных операцией взятия адреса «&»;
б) в теле функции обращаться к этим переменным с помощью операции разыменования «*».
а) в вызывающей программе получить адреса переменных операцией взятия адреса «&»;
б) в теле функции обращаться к этим переменным с помощью операции разыменования «*».
пятница, 22 октября 2010 г.
Функции, параметры функции в C++
В C++, как и во всех других процедурных языках, функции нужны, чтобы разделить программу на относительно независимые части и кодировать каждую часть отдельно от других.
Параметры функции
В C++ параметры передаются функции по значению. Это значит, что если аргумент — переменная, то функция получает копию этой переменной, которая существует лишь пока выполняется тело функции.
Параметры функции
В C++ параметры передаются функции по значению. Это значит, что если аргумент — переменная, то функция получает копию этой переменной, которая существует лишь пока выполняется тело функции.
четверг, 21 октября 2010 г.
Двумерные массивы в свободной памяти
В свободной памяти можно разместить и двумерный массив. Для этого нужно вспомнить, что двумерный массив — это одномерный массив, элементами которого являются одномерные же массивы.
Чтобы разместить в куче целый массив из 3 «строк» и 4 «столбцов»:
typedef int M[4]; // М - промежуточный тип
М* m = new M[3]; // создадим массив обычным способом
Чтобы разместить в куче целый массив из 3 «строк» и 4 «столбцов»:
typedef int M[4]; // М - промежуточный тип
М* m = new M[3]; // создадим массив обычным способом
среда, 20 октября 2010 г.
Массивы в свободной памяти
С помощью операции new можно размещать массивы в свободной памяти. Следующий оператор выделяет память под массив из 50 элементов типа long.
long *m - new long[50];
long *m - new long[50];
вторник, 19 октября 2010 г.
Связь между массивами и указателями
Хотя указатель char* mи массив charm[100] – переменные разных типов, имя массива рассматривается транслятором как указатель на начальный элемент массива. Адресные выраженияm[n] и *(m + n) эквивалентны.
Замечание. Из эквивалентности адресных выражений следует:
m[n] <=> *(m + n) <=> *(n + m) <=>n[m]
Замечание. Из эквивалентности адресных выражений следует:
m[n] <=> *(m + n) <=> *(n + m) <=>n[m]
понедельник, 18 октября 2010 г.
Разыменование и взятие адреса
Основной операцией при работе с указателями является получение доступа к значению, адрес которого хранится в указателе.
воскресенье, 17 октября 2010 г.
Операция new и delete
Операция new, выполненная на некоторым типом, резервирует место в свободной памяти (в кучке), необходимое для хранения значения этого типа. Результатом операции является адрес выделенной памяти или 0, если выделить память не удалось. Тип результата - "указатель на базовый тип”.
суббота, 16 октября 2010 г.
Адресный тип данных
Указатели применяются для работы с массивами, со свободной памятью и в качестве параметров функции.
Указатели - это тип данных, значение которого является адресс данных определенного типа. Бывают и безтиповые указатели, которые хранят просто адресс памяти, но в C++ применяются редко.
Указатели - это тип данных, значение которого является адресс данных определенного типа. Бывают и безтиповые указатели, которые хранят просто адресс памяти, но в C++ применяются редко.
пятница, 15 октября 2010 г.
Сортировка и поиск в массивах
Для упорядочения небольших массивов можно использовать сортировку пузырьком, выбором или вставками, одним словом, олгоритмы с оценкой времени сложности O (n x n).
Для упорядочения больших массивов применяют быструю сортировку Хора или сортировку слиянием, т.е. алгоритмы с оценкой времени сложности O (n log (n)).
Для упорядочения больших массивов применяют быструю сортировку Хора или сортировку слиянием, т.е. алгоритмы с оценкой времени сложности O (n log (n)).
четверг, 14 октября 2010 г.
Двумерные массивы в C++
Двумерный массив – это одномерный массив из одномерных массивов.
Для примера определим двумерный массив m размером 3 x 4.
int m [3] [4] ;
Для примера определим двумерный массив m размером 3 x 4.
int m [3] [4] ;
Одномерные массивы в C++
Пример: Вывести 10 чисел и сохранить их в памяти.
float a[10];
for (int i = 0; I < 10; i++)
cin >> a[i];
float a[10];
for (int i = 0; I < 10; i++)
cin >> a[i];
вторник, 12 октября 2010 г.
Цикл for в C++
В языке C++ имеется еще одна инструкция цикла:
for ( инструкция_инициализации [выражение1];
[выражение2]) инструкция.
Смысл инструкции for таков:
for ( инструкция_инициализации [выражение1];
[выражение2]) инструкция.
Смысл инструкции for таков:
понедельник, 11 октября 2010 г.
Цикл while и do while в C++
Формат инструкции цикла следующий:
while (выражение) инструкция.
Логическое значение в языке C++ могут передаваться числовыми значениями: 0 – ложь, не ноль – истина.
Пример: Вводить с клавиатуры целые числа и суммировать, пока не встретится число 0. Сумму вывести на экран.
while (выражение) инструкция.
Логическое значение в языке C++ могут передаваться числовыми значениями: 0 – ложь, не ноль – истина.
Пример: Вводить с клавиатуры целые числа и суммировать, пока не встретится число 0. Сумму вывести на экран.
Создание приложения в C++
Программы Win32, имитирующие текстовый режим работы компьютера и не имеющие графического интерфейса, называются консольными. Они больше всего подходят для начального освоения C++, т.к. не добавляют к сложности языка сложность программирования оконного интерфейса.
Простейшая программа на C++
Итак, напишем самую простую программу на C++:
#include <iostream>
using namespace std;
void main()
{
cout << "Moya pervaya programma";
}
#include <iostream>
using namespace std;
void main()
{
cout << "Moya pervaya programma";
}
Подписаться на:
Сообщения (Atom)