Єдина Країна!

Головне меню

Наша кнопка

Українські уроки про ІТ

Друзі

Підтримка української армії


Головна Програмування - C++ Базовий курс програмування на С++. Урок 14. Вказівники, посилання

Базовий курс програмування на С++. Урок 14. Вказівники, посилання
Написав Joker   
Понеділок, 23 листопада 2015 08:56
Переглядів: 1528

У всякої дії є своя нагорода і своя ціна

Фільм “Мирний воїн”

 

Сьогодні ми вивчимо:

1. Розв’язок д/з минулого уроку

2. Адреса

3. Вказівники

4. Вказівники і масиви

5. Завдання для закріплення матеріалу

 

 

Розв’язок д/з минулого уроку

1. За допомогою рекурсії підрахувати добуток чисел у діапазоні введеного з клавіатури.

 
#include <iostream>
#include <conio
#include <algorithm>
#include <vector>
using namespace std;

template <typename T> T Product (T i, T j, T res)
{
    res*=i;
    i++;
    if (i<j)
        return Product(i,j,res);
    if (i==j)
        return res*i;
}

int main ()
{
    system("color A");
    int b, e;
    cout<< "Enterstartnumber --> ";
    cin>> b;
    cout<< "Enterendnumber --> ";
    cin>> e;

    cout<< "Result: " <<Product(b,e,1);

    _getch();
    return  0;
}


2. Ханойська вежа


 
// Ханойська вежа
#include  <iostream>
#include  <algorithm>
#include  <vector>
using namespace std;

int counter = 0;

void  t(int r, int b, int e)
{
    int c;

    if (((b == 1) && (e == 2)) || ((b == 2) && (e == 1)))
        c = 3;
    else
        if (((b == 1) && (e == 3)) || ((b == 3) && (e == 1)))
            c = 2;
        else
            if (((b == 2) && (e == 3)) || ((b == 3) && (e == 2)))
                c = 1;

    if (r>1)
    {
        t(r - 1, b, c);
        cout<< b << " --> " << e <<endl;
        counter++;
        t(r - 1, c, e);
    }
    else {
        cout<< b << " --> " << e <<endl;
        counter++;
    }
}

int main()
{
    system("color A");

    t(6, 1, 3);

    cout<< "\n" << "Counter = " << counter <<endl;

    system("pause");
    return  0;
}


 

Адреса

Давайте навчимося дізнаватися адресу пам’яті, де зберігається певна змінна, тобто ту клітинку пам’яті яка зберігає значення певної змінної. Для цього треба використовувати значок & перед іменем змінної. & можна використовувати лише для змінних та елементів масиву.

int main ()
{
    int a = 5;
    cout<< "a = " << a <<endl;
    cout<< "&a = " <<&a <<endl;

    _getch();
    return  0;
}

Змінній a присвоєно значення 5.

&a – адреса змінної a.

 

Вказівники

Вказівник – змінна, яка зберігає адресу іншої змінної. Створюється вказівник за допомогою *.

Приклад програми:

#include <iostream>
#include <conio
#include <algorithm>
#include <vector>
using namespace std;

int main ()
{
    int a = 5;
    int *b = &a;
    cout<< "a = " << a <<endl;
    cout<< "&a = " <<&a <<endl;
    cout<< "b = " << b <<endl;
    cout<< "*b = " << *b <<endl;
    cout<< "&b = " <<&b <<endl;


    _getch();
    return  0;
}


 

- Змінна a зберігає значення 5

- Вказівник b зберігає адресу змінної a

- Ми можемо дізнатися значення змінної a, використовуючи лише її адресу. Використовуємо символ * перед іменем вказівника, так ми звертаємося до цієї адреси і отримуємо значення, що там зберігається (dereference operator).

- b – адреса

- *b – дорівнює a- &b != &a

 

Вказівники і масиви

    int a[10];
    int *p = &a[0];

Так просто ми створили вказівник на перший елемент масиву. Ім’я масиву – вказівник на його перший елемент.

    int *p = &a[0];
    int *z = a;

Крім цього, нам достатньо тільки 1 вказівника, щоб працювати з цілим масивом.

#include <iostream>
#include <conio
#include <algorithm>
#include <vector>
using namespace std;

int main ()
{
    int a[10];
    for (int i=0; i<10; ++i)
        a[i] = i;

    int *p = a;
    for (int i=0; i<10; i++, p++)
        cout<< "*p = " << *p <<endl;

    _getch();
    return  0;
}

*(p+1) означає, що здійснюється посилання на наступний елемент.

Тепер згадайте функції і те як передаються масиви у функцію. Насправді, коли функції передається ім’я масиву, то вона отримує його початкове місце розташування і функція використовує його як змінну (вказівник). Це все можна записати так:

#include <iostream>
#include <conio
#include <algorithm>
#include <vector>
using namespace std;

void Show (int *p, int size)
{
    for (int i=0; i<size; ++i, p++)
    cout<< *p <<endl;
}

int main ()
{
    int a[10];
    for (int i=0; i<10; ++i)
        a[i] = i;

    Show(a, 10);

    _getch();
    return  0;
}

Завдання для закріплення матеріалу

1. Вам дано масив. Поміняйте місцями елементи з парними і непарними індексами.
2. Вам дано два масиви x[a], y[b]. Створіть третій масив, який буде вміщати:
- елементи обох попередніх масивів

- їх спільні елементи

( 7 Проголосувало )

Схожі статті:
Новіші матеріали:
Старіші матеріали:

Коментарі
Добавити новий
Залишити коментар
Ім`я:
e-mail:
 
Тема:
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
 
Введіть цей настирливий код
Русская редакция: www.freedom-ru.net & www.joobb.ru

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 

Ввійти



Підписка

Хто онлайн?

Немає
На даний момент 115 гостей на сайті

Український рейтинг
TOP.TOPUA.NET