Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Посилання та Розпосилання | Вказівники
Основи C

book
Посилання та Розпосилання

Вказівники побудовані навколо двох операторів:

  • Оператор взяття адреси &.

  • Оператор розіменування *.

Оператор взяття адреси

Оператор взяття адреси, представлений символом &, дозволяє нам безпосередньо взаємодіяти з оперативною пам'яттю комп'ютера. Використання & дозволяє отримати фактичну адресу пам'яті об'єкта.

Main.c

Main.c

copy
#include <stdio.h>

int main()
{
int x = 100;

printf("Value of variable: %d\n", x);

printf("Address of variable into RAM: %p\n", &x); // using reference operator `&` for getting address

return 0;
}
123456789101112
#include <stdio.h> int main() { int x = 100; printf("Value of variable: %d\n", x); printf("Address of variable into RAM: %p\n", &x); // using reference operator `&` for getting address return 0; }

Примітка

%p - це специфікатор формату, що використовується для адрес (вказівник).

Адреси зазвичай виражаються у шістнадцятковій нотації.

Думайте про оператор & як про визначення адреси вашого дому за вашим ім'ям.

Оператор Дереференції

Навпаки, оператор * дає вам ім'я мешканця, коли вам відома його адреса. Отже, як ми можемо використовувати цей оператор, якщо ми не працюємо безпосередньо з адресами? Якщо у вас є вираз на кшталт &x, який повертає адресу змінної x, застосування до нього оператора * (*&x) дає вам значення змінної, що зберігається за цією адресою.

Примітка

По суті, *&x те саме, що і x.

Main.c

Main.c

copy
#include <stdio.h>

int main()
{
int x = 100;

printf("Value of variable: %d\n", x);

printf("Address of variable in RAM: %p\n", &x); // using reference operator `&`

printf("Dereferencing address of variable: %d", *(&x)); // using dereference operator `*`

return 0;
}
1234567891011121314
#include <stdio.h> int main() { int x = 100; printf("Value of variable: %d\n", x); printf("Address of variable in RAM: %p\n", &x); // using reference operator `&` printf("Dereferencing address of variable: %d", *(&x)); // using dereference operator `*` return 0; }

Примітка

Не плутайте оператор дереференції (*x) з оператором множення (x*y).

Завдання

Swipe to start coding

  • Створіть масив цілих чисел з 5 елементів і заповніть його.
  • Отримайте адресу третього елемента.
  • Збільшіть адресу третього елемента (тобто адреса + 1).
  • Спробуйте дереференціювати адресу, отриману на попередньому кроці.

Рішення

#include <stdio.h>

int main()
{
int array[] = { 1, 2,3, 4, 5 };

printf("Value of third element %d\n", array[2]);

printf("Address of third element %p\n", &(array[2]));

printf("(address-of-third-element) + 1: %d\n", *((&array[2]) + 1));

return 0;
}
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 6. Розділ 2
single

single

#include <stdio.h>

int main()
{
int array[] = { ___, ___, ___, ___, ___ };

printf("Value of third element %d\n", array[2]);

printf("Address of third element %p\n", ___(array[2]));

printf("(address-of-third-element) + 1: %d\n", ___((___array[2]) + 1));

return 0;
}

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

We use cookies to make your experience better!
some-alt