Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2012, 07:52   #1
CaXaH
Пользователь
 
Регистрация: 14.12.2011
Сообщений: 10
По умолчанию Массив указателей

Здравствуйте, объясните пожалуйста разницу

Цитата:
static const char *mast[4]={"chervi","piki","trefi","bubni" };
от

Цитата:
static const int *p[2]={1,1};
Почему второй вариант не верный?
CaXaH вне форума Ответить с цитированием
Старый 25.09.2012, 08:55   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

CaXaH

Здравствуйте, объясните пожалуйста разницу

первое - массив из 4х указателей на const char, второе - массив из 2х указателей на const int
разница - в размере массивов и типах элементов

Почему второй вариант не верный?

ну наверное потому, что ты пытаешься неявно привести число к указателю.
Rififi вне форума Ответить с цитированием
Старый 25.09.2012, 09:07   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Почему второй вариант не верный?
Это смотря для какой задачи.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2012, 09:17   #4
CaXaH
Пользователь
 
Регистрация: 14.12.2011
Сообщений: 10
По умолчанию

Цитата:
Это смотря для какой задачи.
Он не компилируется, подкиньте хорошей литературы по массивы указателей не могу разобраться в них.
CaXaH вне форума Ответить с цитированием
Старый 25.09.2012, 09:20   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А чего Вы хотели добиться данной строчкой? Или просто составляете программы методом перебора возможных комбинаций?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2012, 09:21   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Он не компилируется, подкиньте хорошей литературы по массивы указателей не могу разобраться в них.

http://bit.ly/Si3F4s
Rififi вне форума Ответить с цитированием
Старый 25.09.2012, 09:58   #7
CaXaH
Пользователь
 
Регистрация: 14.12.2011
Сообщений: 10
По умолчанию

Цитата:
А чего Вы хотели добиться данной строчкой? Или просто составляете программы методом перебора возможных комбинаций?
Если честно ничего не хотел добиться, просто изучаю работу массивов указателей. В книге нашел пример массив указателей на const char, и решил то же испробовать с int - не получилось и стал разбираться)

Вот смотрите:
static int *p[2];
*p[1]=0; можно так инициализировать.
А как инициализировать тогда при объявлении?

Последний раз редактировалось CaXaH; 25.09.2012 в 10:13.
CaXaH вне форума Ответить с цитированием
Старый 25.09.2012, 10:30   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну мы же не телепаты, чего Вы там навертели. Покажите весь код. Да и сам текст ошибки не привели. Может у Вас р уже объявлена, нам откуда знать?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2012, 10:41   #9
CaXaH
Пользователь
 
Регистрация: 14.12.2011
Сообщений: 10
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Ну мы же не телепаты, чего Вы там навертели. Покажите весь код. Да и сам текст ошибки не привели. Может у Вас р уже объявлена, нам откуда знать?
я уже приводил же код.
ну вот Вам полный.

Цитата:
int main()
{
const int *ptr[4]={1,2,3,4};
}
Ошибка:Значение типа int нельзя использовать для инициализации сущности типа "const int*"
CaXaH вне форума Ответить с цитированием
Старый 25.09.2012, 10:42   #10
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

строки в C++, например "piki", по умолчанию имеют тип const char*. И еще, концом строки считается символ '\0' или просто 0, поэтому к строке "piki" неявно прибавляется еще один символ и получается "piki\0".
Массивы в C++/C по умолчанию являются указателями и поэтому не нужно указывать & для получения адреса.

Код:
void foo(const int *param, int length);
...
int arr[5] = {0};
foo(arr, 5); //верно
int i = 0;
foo(&i, 1); //верно
foo(i, 1); //компилируется в C, но ошибка в C++: invalid conversion from 'int' to 'const int*'
Ваш код легко правится так:

static const int p[2]={1,1};

или если вы хотели 2х мерный массив размером 2x1

static const int p[2][1]={{1},{1}};

или 2x2

static const int p[2][2]={{1,3},{1,-5}};

в случае 2х мерного массив, p имеет тип const int **. Указатель на указатель. А квадратные скобочки выполняют поочередное разыменование. Т.е. когда мы пишем p[0], то получаем указатель(адрес) на нулевую(первую) строку двухмерного массива, а когда пишем p[0][0], то получаем первое значение по первому указателю, т.е. применяется второе разыменование и получаем const int.

Более подробно читай в книге в главе про указатели.

Цитата:
Вот смотрите:
static int *p[2];
*p[1]=0; можно так инициализировать.
А как инициализировать тогда при объявлении?
Это не правильно и работать не будет! Читайте про указатели.

Последний раз редактировалось Kostia; 25.09.2012 в 10:46.
Kostia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив указателей nattaella Компоненты Delphi 2 11.06.2011 16:40
Указатель на массив указателей на массив char'ов... SrgGld Общие вопросы C/C++ 0 19.11.2010 23:35
Массив указателей askar Общие вопросы C/C++ 5 07.09.2010 23:11
массив указателей RUSt88 Общие вопросы C/C++ 12 10.01.2010 11:11
массив указателей в С ++ серг Помощь студентам 1 14.12.2009 18:49