Обозначение указателя массива C ++ (при перемещении массива) - PullRequest
0 голосов
/ 21 июня 2020

Я написал этот код, который должен переместить мой массив на 1:

// Declare and initialize Array
int temp;
int dim[5] = { 6, 7, 8, 9, 10 };


int array_size = sizeof(dim) / sizeof(dim[0]);
cout << "Array-Size: " << dim[array_size - 1] << endl;

// Move by 1 position
for (int i = 0; i < (array_size - 1); i++)
{
    temp = dim[array_size - 1];
    dim[array_size - 1] = dim[i];
    dim[i] = temp;
}

// Console Output
for (int i = 0; i < array_size; i++)
{
    cout << dim[i] << ' ';
}

Все работает нормально, но я хочу изменить его на обозначение указателя. Я уже много чего пробовал, но когда я меняю массив на обозначение указателя, я получаю странный результат. Во-первых, можно ли вообще изменить код на обозначение указателя, а во-вторых, если да, как мне это сделать? Буду признателен за любой совет. Спасибо!

1 Ответ

2 голосов
/ 21 июня 2020

dim[i] - это синтаксис c сахар для *(dim + i). Вы можете заменить все обозначения массива эквивалентными обозначениями указателей.

// Declare and initialize Array
int temp;
int dim[5] = { 6, 7, 8, 9, 10 };


int array_size = sizeof(dim) / sizeof(dim[0]);
cout << "Array-Size: " << *(dim + array_size - 1) << endl;

// Move by 1 position
for (int i = 0; i < (array_size - 1); i++)
{
    temp = *(dim + array_size - 1);
    *(dim + array_size - 1) = *(dim + i);
    *(dim + i) = temp;
}

// Console Output
for (int i = 0; i < array_size; i++)
{
    cout << *(dim + i) << ' ';
}

Использование динамического c выделение памяти:

// Declare and initialize Array
int temp;
int array_size = 5;
int *dim = new int[array_size]{ 6, 7, 8, 9, 10 };

cout << "Array-Size: " << *(dim + array_size - 1) << endl;

// Move by 1 position
for (int i = 0; i < (array_size - 1); i++)
{
    temp = *(dim + array_size - 1);
    *(dim + array_size - 1) = *(dim + i);
    *(dim + i) = temp;
}

// Console Output
for (int i = 0; i < array_size; i++)
{
    cout << *(dim + i) << ' ';
}
delete[] dim;

Использование динамического c выделение памяти и указатели для l oop:

// Declare and initialize Array
int temp;
int array_size = 5;
int *dim = new int[array_size]{ 6, 7, 8, 9, 10 };

cout << "Array-Size: " << *(dim + array_size - 1) << endl;

// Move by 1 position
for (int *ptr = dim; ptr < (dim + array_size - 1); ++ptr)
{
    temp = *(dim + array_size - 1);
    *(dim + array_size - 1) = *ptr;
    *ptr = temp;
}

// Console Output
for (int *ptr = dim; ptr < dim + array_size; ++ptr)
{
    cout << *ptr << ' ';
}
delete[] dim;
...