Primer 2 Лекция 10

Указатели.

Лекция 10. Указатели. Структуры.

Программы на C++ хранят переменные в памяти. Указатель представляет собой адрес памяти, который указывает на определенный участок.
10.1.1 Использование указателя на символьную строку.
Когда программа передает массив (например, символьную строку) в функцию, C++ передает адрес первого элемента массива. В результате совершенно обычно для функции использовать указатель на символьную строку. Чтобы объявить указатель на символьную строку, функция просто предваряет имя переменной звездочкой:

void some_function(char *string);

highlightSyntax('cpp_97293','cpp'); Звездочка, которая предваряет имя переменной, указывает C++, что переменная будет хранить адрес памяти - указатель. Следующая программа использует указатель на символьную строку внутри функции show_string для вывода содержимого строки по одному символу за один раз.

Primer 1 Лекция 10.

#include <iostream>

using namespace std;

void show_string(char *string)

{

while (*string!= '\0')

{

cout << *string;

string++;

}

}

int main()

{

system("chcp 1251");

show_string("Язык C++!");

system("pause");

}

highlightSyntax('cpp_11850','cpp'); Условие while (*string!= '\0') проверяет, не является ли текущий символ, указываемый с помощью указателя string, символом NULL, который определяет последний символ строки. Если символ не NULL, цикл выводит текущий символ с помощью cout. Затем оператор string++; увеличивает указатель siring таким образом, что он указывает на следующий символ строки. Когда указатель string указывает на символ NULL, функция уже вывела строку и цикл завершается.

Строка, переданная в функцию, находится в памяти компьютера по адресу 1000. Каждый раз, когда функция увеличивает указатель string, он указывает на следующий символ (адрес 1001,1002, 1003).

Используя указатель, функция может сканировать строку символов, пока не будет обнаружен символ NULL. Следующая программа использует указатель на строку в функции string_length для определения количества символов в строке.

#include <iostream>

using namespace std;

int string_length(char *string)

{

int length = 0;

while (*string!= '\0')

{

length++;

string++;

}

return(length);

}

int main()

{

system("chcp 1251");

char title[] = "Язык C++";

cout << title << endl << "содержит " << string_length(title) << " символов" << endl;

system("pause");

}

highlightSyntax('cpp_97815','cpp'); Когда программа передает массив в функцию, C++ передает адрес памяти первого элемента этого массива. Используя переменную-указатель, функция может перемещаться по содержимому массива, просто увеличивая значение указателя.

10.1.2. Уменьшение количества операторов.

Чтобы определить конец символьной строки, каждая из предыдущих программ использовала следующий цикл while:

while (*string!= '\0');

Cимвол NULL ('\0') представляет собой значение ASCII 0. Так как C++ использует значение 0, чтобы представить ложь, можно записать предыдущий цикл следующим образом:

while (*string)

В данном случае пока символ, определяемый указателем строки, не равен 0 (NULL), условие оценивается как истинное и цикл будет продолжаться. Постфиксная операция увеличения C++ позволяет использовать значение переменной, а затем увеличивает это значение. Программы на C++ используют постфиксные операции увеличения и уменьшения, чтобы сканировать массивы с помощью указателей. Например, использование постфиксной операции увеличения делает следующие циклы while идентичными:

while (*string)
{
cout << *string++;
}
 
while (*string)
{
cout << *string;
string++;
}

highlightSyntax('cpp_78762','cpp'); Оператор cout << *string++ позво ляет C++ вывести символ, указываемый указателем string, а затем увеличить текущее значение string, чтобы он указывал на следующий символ. С помощью этих методов следующая программа иллюстрирует новую реализацию функций show_string и string_length:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: