Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VC++(теория).doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
375 Кб
Скачать
☆

Задание: добавьте еще один элемент в массив при инициализации и посмотрите его размерность. В цикле увеличьте значение всех элементов массива на 10 и напечатайте его заново. Работа со строками

  • Строки представленны как массив символов, заканчивающийся нулем (\0). Имя переменной-строки совпадает с адресом ее первого символа.

  • Для работы со строками имеется системная библиотека <string.h>, содержащая все необходимые функции, например:

  • strcpy – копирование строк

  • strcat – соединение строк

  • strlen – вычисление длины строки

  • strcmp – сравнение строк

(\19STRING)

#include <iostream>

#include <string.h> // Заголовок библиотеки для работы со строками

using namespace std;

int main ()

{

char sz1[21]; // Резервирование места для строки из 20 символов

char sz2[5] = "ship"; // Объявление и инициализация строки

char sz3[6] = {'p','l','a','n','e','\0'}; // Еще один вариант

char sz4[] = "truck"; // Инициализация без задания размера

char sz5[4];

sz5[0] = 'c'; // Заполнение содержания строки посимвольно

sz5[1] = 'a';

sz5[2] = 'r';

sz5[3] = '\0';

cout << "Enter a string : " ; // Приглашение на ввод строки

cin >> sz1; // Считывание строки

// Вывод всех строк

cout << sz1 << endl << sz2 << endl << sz3 << endl << sz4 << endl << sz5 << endl;

strcpy(sz1, "Hello"); // Копирование строки в sz1

cout << sz1 << endl;

strcat(sz1, ", world!"); // Соединение строк

cout << sz1 << endl;

int ilen = strlen(sz1); // Вычисление длины строки

cout << "length sz1 = " << ilen << endl;

switch (strcmp(sz1, sz2)) { // Сравнение строк sz1 и sz2

case 0: cout << "sz1 is equal sz2" << endl; // Строки равны

break;

case 1: cout << "sz1 is greater than s2" << endl; // sz1 больше

break;

case -1: cout << "sz2 is greater than s1" << endl; // sz2 больше

break;

}

return(0);

}

Задание: Объявить строковую переменную, которая может содержать до 10 символов, спросить пользователя ввести в нее значение, напечатать ее, найти ее длину. Добавить к строке строковую константу " !" и напечатать ее.

Указатели и выделение памяти

  • При объявлении обычной переменной в месте ее обявления (по этому адресу) хранится ее реальное значение. Указатель – это ссылка на адрес, где храниться переменная. Указатель обозначается звездочкой (*) перед именем переменной.

int *pi; // объявление указателя на целое значение

  • Для инициализации указателя ему нужно присвоить адрес реальной переменной, адрес переменной можно получить через операцию получения адреса (&). Неинициализированный указатель может ссылаться на что угодно и его использовать нельзя.

pi = &i; // инициализировать указатель адресом переменной i

  • Использовать значение переменной по указателю можно разыменовав его (операция *)

cout << "*pi = " << *pi << endl; // Считать значение по указателю

  • Изменить значение переменной по указателю можно:

*pi = 11; // Присвоение значения переменной по указателю

  • Если объявлять массив переменных, то память для него резервируется для всех элементов, если неизвестно, сколько элементов будет в нем содержаться, то эффективней динамически резервировать память для нужного числа элементов.

  • В C++ используются операторы new и delete для выделения и освобождения блока памяти под элемент или массив элементов (malloс и free – в С)

  • Параметром new является выражение, определяющее число выделяемых байт, а возвращаемым значением - указатель на начало блока памяти или 0

  • Параметром delete является указатель на начало блока памяти

(\20NEWDEL)

#include <iostream>

using namespace std;

#define NULL 0 // Объявление констант

#define ISIZE 512

int main()

{

int i = 1, j = 2; // Объявление двух переменных целого типа

cout << "i = " << i << " j = " << j << endl; // Печать значений переменных

int *pi; // Объявление указателя на целое число

pi = &i; // инициализировать указатель адресом переменной i

cout << "*pi = " << *pi << endl; // Считать значение по указателю

*pi = 11; // Присвоение значения переменной по указателю

cout << "i = " << i << endl; // Значение переменной i изменилось

cout << "*pi = " << *pi << endl; // Считать значение по указателю

pi = &j; // инициализировать указатель адресом переменной j

cout << "*pi = " << *pi << endl; // Теперь указатель ссылается на j

pi = new int[ISIZE]; // Динамическое выделение памяти под 512 целых чисел

if (pi == NULL) // Проверка успешности операции

cout << "Insufficient memory\n"; // Нехватка памяти

else

cout << "Memory allocated\n"; // Память выделена

*pi = 10; // Первому элементу массива присвоить 10

pi++; // Переход ко второму элементу

*pi = 20; // Второму элементу массива присвоить 20

i = *pi; // Присвоить i значение второго элемента массива

j = *(--pi); // Присвоить j значение первого элемента массива

cout << "i = " << i << " j = " << j;

delete(pi); // Освобождение выделенной памяти

return(0);

}

Задание: объявить и инициализировать массив из 3 целых чисел и получить в указатель адрес второго элемента. Работая через указатель, увеличить значение второго элемента массива вдвое, после чего распечатать его.

  • Тип указателя void (не путать с void при описании параметров и возвращаемого значения функции) - хранит в себе адрес другой переменной, ничего не зная о типе, то есть может ссылаться на любой тип данных, при его использовании необходимо приведение типов

void *p = &i; // Объявление и инициализация обобщенного указателя

*(int*)p = 13; // Приведение типа к указателю на целое

  • Можно использовать указатель на указатели и т.п.

int **ppi; // Объявления указателя на указатель на целое число

ppi = &pi // Инициализация значением адреса указателя

**ppi = 100; // Использование

  • Работа со строками также возможна через указатели. Имя массива символов – это адрес его первого элемента, соответственно инициализировать указатель на строку можно именем массива

char *psz, *pszWorld = "world !";

char szHello[20] = "Hello, ";

psz = szHello; // Инициализировать указатель

//psz = &szHello[0]; // Второй вариант того же

strcat(psz, pszWorld); // Добавить константу

cout << psz;

  • Функция main может принимать два аргумента: количество параметров и массив указателей на строки, при необходимости, эти аргументы можно использовать для анализа параметров передаваемых при запуске программы из командной строки (\21AMAIN)

#include <iostream>

using namespace std;

int

main(int argc, char *argv[]) // Аргументы: кол-во и массив параметров

{

for (int i = 0; i < argc; i++) // Перебор параметров

cout << argv[i] << endl; // Печать параметра

return;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]