1

Тема: Масиви та вказівники

Як створити вказівник для двовимірного масиву таким чином, щоб до елементів даного масиву можна було звертатися через вказівник???

2

Re: Масиви та вказівники

Яким чином би ви не створили двовимірний масив, до його елементів можна буде звертатися через вказівник. До будь-якого об'єкту в пам'яті можна звертатися через вказівник, власне, не існує іншого способу звернутися до об'єкта в пам'яті, просто іноді компілятор від вас ці вказівники приховує.
Може, переформулюєте питання, наведете зразки коду?

Подякували: leofun01, 221VOLT, vаrіg2kо3

3

Re: Масиви та вказівники

Наприклад в одновимірному масиві я міг просто звернувся до кожного елементу через вказівник:

int i, n;
cout << "n = ";
cin >> n;
int arr[n];
for(i = 0; i < n; i++){
    arr[i] = rand() % 41 - 10;
}
int *ptr = arr;
for(i = 0; i < n; i++){
    cout << ptr[i] << " ";
}

Чому не можу за таким же принципом робити з двовимірним масивом? Такий код дай помилку:

int i, j, n, m;
cout << "n = ";
cin >> n;
cout << "m = ";
cin >> m;
int arr[n][m];
for(i = 0; i < n; i++){
    for(j = 0; j < m; j++){
        arr[i][j] = rand() % 41 - 10;
    }
}

int *ptr = arr;

for(i = 0; i < n; i++){
    for(j = 0; j < m; j++){
        cout << ptr[i][j] << " ";
    }
    cout << endl;
}

4 Востаннє редагувалося Yola (14.01.2019 20:02:37)

Re: Масиви та вказівники

Якщо ти вчиш С++, то ось як можна зробити:

    const int w = 5;
    const int h = 6;
    std::array<std::array<int, w>, h> matrix;
    for (const auto& row : matrix) {
        for (auto el : row) {
            std::cout << el << " ";
        }
        std::cout << std::endl;
    }

Масив int[height][width] - це масив масивів, тобто тобі потрібен вказівник на масив.

Подякували: leofun011

5

Re: Масиви та вказівники

Проблема у тому, на що саме вказівник.
Якщо це масив int-ів, то вказівник на елемент буде вказівником на int, логічно?
А якщо це масив масивів (двовимірних масивів в C/C++ не існує), то вказівник на елемент буде вказівником на масив, правильно?

int (*ptr)[m] = arr;

Взагалі я би мав спитати, нащо це вам, але виходитиму з того, що якщо ви ставите таке вузьке питання, то вам і відповідь потрібна так само вузька.

Подякували: leofun01, kotandrey, vаrіg2kо3

6

Re: Масиви та вказівники

Дякую, тепер код працює

7

Re: Масиви та вказівники

Крім приведення до

  • int (*)[dim1]

можна використовувати і наступні

  • int *

  • int *[dim0]

  • int **

Приклади :

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int const dim0 = 3, dim1 = 4;
    int arr[dim0][dim1];
    for(int i = 0; i < dim0; ++i)
        for(int j = 0; j < dim1; ++j)
            arr[i][j] = rand() % 41 - 10;
    int *ptr1 = (int *)arr;
    for(int i = 0; i < dim0; ++i) {
        for(int j = 0; j < dim1; ++j)
            printf(" %3i", ptr1[dim1 * i + j]);
        printf("\n");
    }
    printf("\n");
    int *arr2[dim0];
    for(int i = 0; i < dim0; ++i)
        arr2[i] = arr[i];
    int **ptr2 = arr2;
    for(int i = 0; i < dim0; ++i) {
        for(int j = 0; j < dim1; ++j)
            printf(" %3i", ptr2[i][j]);
        printf("\n");
    }
    printf("\n");
}
Подякували: kotandrey, 221VOLT2

8 Востаннє редагувалося koala (19.09.2019 12:12:06)

Re: Масиви та вказівники

Найкращі уроки для майбутніх програмістів!!!
Помилкове посилання

9 Востаннє редагувалося koala (19.09.2019 12:15:06)

Re: Масиви та вказівники

Ви випадково на версію для іншої країни посилання виклали.
Є Prometheus CS50, якщо комусь потрібно.
І взагалі створюйте нову тему чи шукайте відповідну, тут конкретне питання розглядається.

Подякували: FakiNyan, vаrіg2kо2

10

Re: Масиви та вказівники

Всім Привіт;)
Поможіть з таким завданням буду вдячний Вам

Задані дійсні числа x1, x2, . . . , x25. Визначити порядковий номер того із
них, який найближчий до заданого цілого числа.

11

Re: Масиви та вказівники

MrDizzeR написав:

Всім Привіт;)
Поможіть з таким завданням буду вдячний Вам

Задані дійсні числа x1, x2, . . . , x25. Визначити порядковий номер того із
них, який найближчий до заданого цілого числа.

допоможем коли ви прочитаєте ось це https://replace.org.ua/rules/

12

Re: Масиви та вказівники

Якщо для вас словосполучення "Поможіть мені" та "Зробіть за мене" рівні то  Усе погано.

13

Re: Масиви та вказівники

Я прочитав Дякую!

14

Re: Масиви та вказівники

MrDizzeR написав:

Я прочитав Дякую!

1) сворюємо масив
2) визначаємо його розмір
3) копіюємо масив
4) сортуємо скопійований масив
5) проходимся по відсортованому масиву і дивимся чи задане число не являєтся членом масиву, якщо так то виводимо його порядковий номер та завершаєм блок за допомогою return 0;
6) дивимся чи наше число не меньше за нульовий елемент і чи не більше за останній, якщо ця умова виконуєтся то в перемінну (прикл gleaming_mum) записуємо те число
7) проходимся по масиву починаючи з першого елемента і по останній і перевіряємо чи задане число більше arr[i-1] та чи меньше ніж arr[i]
8)якщо попередня умова виконуєтся то від тих елементів віднімаємо наше задане число і там де результат буде меньше те число і записуємо в перемінну (прикл gleaming_mum) ps. результат (прикл x - arr[i]) потрібно зробити додатним
9) проходимся по найпершому невідсортованому масиву і шукаємо наше (прикл gleaming_mum) і виводимо на екран наше бажане число :3

я ще дуже погано розуміюсь в програмуванні тому прошу небити якщо щось не так написав :D

15

Re: Масиви та вказівники

5) проходимся по НЕ відсортованому масиву
7) [0, 1, 2, 3, 4] 0 - нульовий елемент, 1 - перший