#include <iostream>
using std::cout;
using std::endl;
Int main()
{
char string1[10], *string2 = "Hello",
string3[10], *string4 = "GoodBye",
* tmp;
//копирование string 2 в string 1, используя обозначение массива
for (int i=0; (string1[i]= string2[i])!= '\0'; ++i) ;
cout<<"string1:"<<string1<<endl;
//копирование string4 в string3, используя обозначение указателя
tmp=string3; //используем tmp, т.к. нельзя string3++
for (; (*tmp = *string4)!= '\0'; tmp++, string4++) ;
cout<<"string3:"<<string3<<endl;
system("pause");
return 0;
}
Пример 3_4_3. Указатели и массивы символов
#include <cstring>
#include <iostream>
using std::endl;
using std::cout;
Int main()
{ // использование функции strtok для определения слов в предложении
// разделитель слов - пробел
char str[] = "Это предложение из 5 слов";
char *tkPtr; //указатель на слово
tkPtr = strtok (str, " ");
while (tkPtr!= NULL) {
cout<<tkPtr<<endl;
tkPtr=strtok(NULL, " ");
}
system("pause");
return 0;
}
Указатели и ссылки как параметры
Передача параметров по адресу. Указатели и ссылки используются для передачи параметров по адресу.Схема обмена информацией вызывающей программы и функции с использованием передачи параметра по адресу приведена на рисунке 3.1. В этом случае формальный параметр a обрабатывается в функции как переменная, адрес которой есть адрес соответствующего фактического параметра x.

Рисунок 3.1 – Передача параметра по адресу
В операторе вызова фактическим параметром может быть только переменная.
Любое изменение формального параметра a есть изменение соответствующего ему фактического параметра x. После завершения работы функции f значение x равно 1, так как в функции выполнен оператор а++.
Пример 3_5_1. Перестановка значений
Вариант 1
# include < iostream >
using std::cout;
using std::endl;
void swap _ values (int * a, int * b) // формальный параметр - указатель
{
int temp =* a; // требуется разыменование указателей
*a=*b;
*b=temp;
}
Int main()
{
int x =10, y =20;
swap _ values (& x, & y); // требуется операция &, так как
// параметры передаются по адресу
cout << x <<" "<< y << endl; // результат: 20 10
system("pause");
return 0;
}
Вариант 2
#include <iostream>
using std::cout;
using std::endl;
void swap _ values (int & a, int & b) // формальный параметр - ссылка
{
int temp = a; // НЕ требуется разыменование указателей
a=b;
b=temp;
}
Int main()
{
int x =10, y =20;
swap _ values (x, y); // НЕ требуется операция &
cout << x <<" "<< y << endl; // результат: 20 10
system("pause");
return 0;
}
Передача массивов в качестве параметров
Во многих случаях передавать значения в функции выгоднее по адресу, а не по значению. Особенно эффективна передача по адресу, если передаваемые данные имеют большой размер, например массивы данных. Однако, при этом досаточно часто требуется защитить передаваемые данные от изменения. Для этого в прототипе функции используется неконстантный указатель на константные данные.






