Указатели с массивами: char * getCharacterAddress (char array [] [arraySize], int row, int column): - PullRequest
0 голосов
/ 11 июня 2018

Я просто пытаюсь заполнить пустую реализацию в function.h, но я не понимаю, как это сделать.

В тесте main.cpp у меня есть следующее:

TEST_CASE("Testing getCharacterAddress()"){
const unsigned int rows = 5;
const unsigned int columns = 5;

char first[rows][columns] = {
    {'f', 'i', 'r', 's', 't'},
    {'s', 'e', 'c', 'o', 'n'},
    {'t', 'h', 'i', 'r', 'd'},
    {'f', 'o', 'u', 'r', 't'},
    {'f', 'i', 'f', 't', 'h'}
};

for (int i = 0; i < 5; i++){
    for(int j = 0; j < 5; j++){
        void* address = getCharacterAddress(first, i, j);
        INFO("Testing Address: " << address << " to contain: " << first[i][j]);
        REQUIRE(*(char*)address == first[i][j]);
    }
}

}

Теперь в функции .h У меня есть следующая функция:

char * getCharacterAddress (char (* array) [arraySize], int row, int column)

Я понимаю, что функция принимает двумерный массив, строку и столбец, но я не знаю, как получитьзначение адреса для конкретной комбинации строк и столбцов.

Пожалуйста, помогите мне и спасибо !!:)

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Требуется адрес записи 2D-массива, верно?

Для получения адреса объекта есть оператор адреса &:

char* getCharacterAddress(char array[][5], size_t i, size_t j) { 
    return & array[i][j];
}
0 голосов
/ 11 июня 2018

Чтобы получить адрес переменной в c ++, используйте амперсанд, &.Например, рассмотрим

int a = 1;
int* b = &a;

b как указатель, поскольку он указывает на a (а его значение равно адресу a).

Аналогично, реализацияваша функция будет выглядеть как

char* getCharacterAddress(char arr[rows][columns], int row, int col){
    return &arr[row][col];  // return the adress of the specified char
}
...