Форум программистов, компьютерный форум CyberForum.ru

Указатель на массив символов - C++

Восстановить пароль Регистрация
 
psdmaster
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 44
07.02.2013, 21:45     Указатель на массив символов #1
фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void putX(int x, int y, char** mass);
 
/////////////////////////////////////
// -------- Главная часть -------- //
/////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    char mass[9]= {' '};
    int x = 0, y = 0;
 
    do
    {
        key = _getch();
        if (key==0||key==224)
        {
            key=_getch();
            moveCursor(x, y, key);
        }
        else if (key == 32) {putX(x, y, &mass);}
    } while (key != 27);
 
    getchar();
    return 0;
}
/////////////////////////////////////
// ----- Конец главной части ----- //
/////////////////////////////////////
 
void putX(int x, int y, char** mass)
{
    if (*mass[y*3 + x] == ' ') {*mass[y*3 + x] = 'X';}
}
Выдает ошибку:
1>d:\c++\tictactoe\tictactoe\tictactoe.cpp(74): error C2664: 'putX' : cannot convert parameter 3 from 'char (*)[9]' to 'char **'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
1. Что нужно исправить?
2. Как сделать не указатель, а ссылку на массив?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 21:45     Указатель на массив символов
Посмотрите здесь:

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив. C++
Динамический массив и указатель на указатель C++
Удаление символов строки, используя указатель C++
Написать функцию принимающую массив и возвращающую указатель на динамический массив C++
Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
07.02.2013, 22:02     Указатель на массив символов #2
Цитата Сообщение от psdmaster Посмотреть сообщение
putX(x, y, &mass);
Не надо так третий параметр передавать
psdmaster
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 44
07.02.2013, 22:56  [ТС]     Указатель на массив символов #3
Цитата Сообщение от go Посмотреть сообщение
Не надо так третий параметр передавать
А как надо?
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
08.02.2013, 00:08     Указатель на массив символов #4
Цитата Сообщение от psdmaster Посмотреть сообщение
А как надо?
&mass - получается, что ты адрес указатебя берешь...)
попробуй так mass
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
08.02.2013, 01:06     Указатель на массив символов #5
&mass - получается, что ты адрес указатебя берешь...)
попробуй так mass
фигню советуете

char mass[9] у тебя описывает константный указатель на строку
а ты пытаешься передать ее как неконстантую, т.е. допускаешь ее изменение.

но если вопрос стоит именно что вместо &mass писать, то const_cast<>() разве что спасёт
Вообще, это моветон и так делать нельзя, поэтому не советую, но const_cast изучал для таких вопросов. Как-то должно сработать.
psdmaster
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 44
08.02.2013, 01:40  [ТС]     Указатель на массив символов #6
Цитата Сообщение от abit Посмотреть сообщение
фигню советуете

char mass[9] у тебя описывает константный указатель на строку
а ты пытаешься передать ее как неконстантую, т.е. допускаешь ее изменение.

но если вопрос стоит именно что вместо &mass писать, то const_cast<>() разве что спасёт
Вообще, это моветон и так делать нельзя, поэтому не советую, но const_cast изучал для таких вопросов. Как-то должно сработать.
Тогда как массив описать как переменный?

Добавлено через 5 минут
Цитата Сообщение от NeonLost Посмотреть сообщение
&mass - получается, что ты адрес указатебя берешь...)
попробуй так mass
d:\c++\tictactoe\tictactoe\tictactoe.cpp(74): error C2664: 'putX' : cannot convert parameter 3 from 'char [9]' to 'char **'
1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
08.02.2013, 02:53     Указатель на массив символов #7
Цитата Сообщение от psdmaster Посмотреть сообщение
Тогда как массив описать как переменный?
я кстати всё это время думал над этой задачей...

оказалось всё сложнее, чем я сперва прикинул...

вот что у меня получилось

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
 
void putX(int x, int y, char ** mass)
{
    if ((*mass)[y*3 + x] == ' ') {(*mass)[y*3 + x] = 'X';}
}
 
int main()
{
        char *m = new char[9];
        m[0] = ' ';
 
        char mass[9] = {' '};
        int x = 0, y = 0;
 
        std::clog << "Mark -1" << std::endl;
 
        putX(x, y, &m);
 
 
        std::clog << "Mark 0" << std::endl;
 
        if (mass[y*3 + x] == ' ') {mass[y*3 + x] = 'X';}
        //putX(x, y, (char**) &mass);
 
 
        std::clog << "Mark 1" << std::endl;
 
        std::cout << mass[0];
        return 0;
}
Вот так все работает как ожидалось

но это ещё не конец ))) я ещё думаю

Добавлено через 1 час 1 минуту
всё... дошло)))
вот решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstdio>
 
void putX(int x, int y, char ** mass)
{
        if ((*mass)[y*3 + x] == ' ') {(*mass)[y*3 + x] = 'X';}
}
 
int main()
{
        char mass[9] = {' '};
        int x = 0, y = 0;
        printf("%p  %p\n", mass, &mass);
 
        std::clog << "Mark 0" << std::endl;
 
        char *pm = (char *)mass;
        putX(x, y, & pm);
 
        std::clog << "Mark 1" << std::endl;
 
        std::cout << mass[0] << std::endl;
        return 0;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
08.02.2013, 05:05     Указатель на массив символов #8
Цитата Сообщение от abit Посмотреть сообщение
C++
1
void putX(int x, int y, char ** mass)
А зачем двойной указатель?
psdmaster
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 44
08.02.2013, 09:26  [ТС]     Указатель на массив символов #9
Цитата Сообщение от Croessmah Посмотреть сообщение
А зачем двойной указатель?
Первый потому что массив, второй чтобы значение сохранилось после выхода из функции.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11800 / 6779 / 765
Регистрация: 27.09.2012
Сообщений: 16,829
Записей в блоге: 2
Завершенные тесты: 1
08.02.2013, 09:33     Указатель на массив символов #10
Цитата Сообщение от psdmaster Посмотреть сообщение
второй чтобы значение сохранилось после выхода из функции.
не вижу фактического изменения самого указателя =)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstdio>
 
void putX(int x, int y, char * mass)
{
        if (mass[y*3 + x] == ' ') {mass[y*3 + x] = 'X';}
}
 
int main()
{
        char mass[9] = {' '};
        int x = 0, y = 0;
        printf("%p  %p\n", mass, &mass);
 
        std::clog << "Mark 0" << std::endl;
 
        char *pm = (char *)mass;
        putX(x, y, pm);
 
        std::clog << "Mark 1" << std::endl;
 
        std::cout << mass[0] << std::endl;
        return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 18:22     Указатель на массив символов
Еще ссылки по теме:

C++ Как получить ссылку на указатель или указатель на указатель в массиве?
Указатель на двумерный массив символов C++
C++ Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
psdmaster
0 / 0 / 0
Регистрация: 05.02.2013
Сообщений: 44
08.02.2013, 18:22  [ТС]     Указатель на массив символов #11
Цитата Сообщение от Croessmah Посмотреть сообщение
не вижу фактического изменения самого указателя =)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <cstdio>
 
void putX(int x, int y, char * mass)
{
        if (mass[y*3 + x] == ' ') {mass[y*3 + x] = 'X';}
}
 
int main()
{
        char mass[9] = {' '};
        int x = 0, y = 0;
        printf("%p  %p\n", mass, &mass);
 
        std::clog << "Mark 0" << std::endl;
 
        char *pm = (char *)mass;
        putX(x, y, pm);
 
        std::clog << "Mark 1" << std::endl;
 
        std::cout << mass[0] << std::endl;
        return 0;
}
А без введения указателя pm нельзя никак обойтись? Может вообще можно по другому изменить массив внутри функции?

И между делом. Ниже строчка должна по-моему всем элементам массива присваивать значение ' '.
C++
1
char mass[9]= {' '};
Но присваивается только первому. Как сделать чтобы всем присваивалось?
Yandex
Объявления
08.02.2013, 18:22     Указатель на массив символов
Ответ Создать тему
Опции темы

Текущее время: 06:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru