Добро пожаловать в блог официального сайта www.cplus-plus.ru

Все представленные материалы в этом блоге находятся по адрусу www.cplus-plus.ru 
Сайт разработан с целью удобного изучения объектно-ориентированного программирования языка C++. Сайт содержит: большое количество cред разработки, видеоуроков, исходников, учебников C++ как для начинающих, так и для продвинутых!

Поиск по этому блогу

Каталог статей

четверг, 28 октября 2010 г.

Двумерные массивы в C++ как параметры

Когда параметром является двумерный массив, его вторая размерность обязательно указывается в объявлении функции

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


среда, 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


вторник, 26 октября 2010 г.

C++. Возврат ссылки

Функция может не только принимать параметры-ссылки, но и возвращать ссылку в программу.

Пример. Определение функции, которая возвращает ссыл¬ку на больший из двух аргументов.

int& refmax(int &а, int &b)
{
if (a >= b)
return a;
else
return b;
}

понедельник, 25 октября 2010 г.

Ссылки в C++

Как видно из предыдущего примера, для работы внутри функции с выходным параметром необходимо:

а) в вызывающей программе получить адреса переменных операцией взятия адреса «&»;
б) в теле функции обращаться к этим переменным с помощью операции разыменования «*».

пятница, 22 октября 2010 г.

Функции, параметры функции в C++

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

В C++ параметры передаются функции по значению. Это значит, что если аргумент — переменная, то функция получает копию этой переменной, которая существует лишь пока выполняется тело функции.

четверг, 21 октября 2010 г.

Двумерные массивы в свободной памяти

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

Чтобы разместить в куче целый массив из 3 «строк» и 4 «столбцов»:

typedef int M[4]; // М - промежуточный тип
М* m = new M[3]; // создадим массив обычным способом

среда, 20 октября 2010 г.

Массивы в свободной памяти

С помощью операции new можно размещать массивы в свободной памяти. Следующий оператор выделяет память под массив из 50 элементов типа long.

long *m - new long[50];

вторник, 19 октября 2010 г.

Связь между массивами и указателями

Хотя указатель char* mи массив charm[100] – переменные разных типов, имя массива рассматривается транслятором как указатель на начальный элемент массива. Адресные выраженияm[n] и *(m + n) эквивалентны.

Замечание. Из эквивалентности адресных выражений следует:

m[n] <=> *(m + n) <=> *(n + m) <=>n[m]

понедельник, 18 октября 2010 г.

Разыменование и взятие адреса

Основной операцией при работе с указателями является получение доступа к значению, адрес которого хранится в указателе.

воскресенье, 17 октября 2010 г.

Операция new и delete

Операция new, выполненная на некоторым типом, резервирует место в свободной памяти (в кучке), необходимое для хранения значения этого типа. Результатом операции является адрес выделенной памяти или 0, если выделить память не удалось. Тип результата - "указатель на базовый тип”.

суббота, 16 октября 2010 г.

Адресный тип данных

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

Указатели - это тип данных, значение которого является адресс данных определенного типа. Бывают и безтиповые указатели, которые хранят просто адресс памяти, но в C++ применяются редко.

пятница, 15 октября 2010 г.

Сортировка и поиск в массивах

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

Для упорядочения больших массивов применяют быструю сортировку Хора или сортировку слиянием, т.е. алгоритмы с оценкой времени сложности O (n log (n)).

четверг, 14 октября 2010 г.

вторник, 12 октября 2010 г.

Цикл for в C++

В языке C++ имеется еще одна инструкция цикла:
for ( инструкция_инициализации [выражение1];
  [выражение2]) инструкция.
Смысл инструкции for таков:

понедельник, 11 октября 2010 г.

Цикл while и do while в C++

Формат инструкции цикла следующий:
while (выражение) инструкция.
Логическое значение в языке C++ могут передаваться числовыми значениями: 0 – ложь, не ноль – истина.

Пример: Вводить с клавиатуры целые числа и суммировать, пока не встретится число 0. Сумму вывести на экран.

Создание приложения в C++

Программы Win32, имитирующие текстовый режим работы компьютера и не имеющие графического интерфейса, называются консольными. Они больше всего подходят для начального освоения C++, т.к. не добавляют к сложности языка сложность программирования оконного интерфейса.

Простейшая программа на C++

Итак, напишем самую простую программу на C++:

#include <iostream>
using namespace std;
void main()
{
cout << "Moya pervaya programma";
}

Объектно-ориентированное программирование на языке C++