Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [pointer on C] задачи на указатели 
V
    Опции темы
cupper
Дата 18.9.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Нужно подтянуть такую сложную тему в программировании как указатели. Сказали есть книжка Pointet on C, но перевода не нашол, а англ не потяну читать. Может быть кто нибудь знает сборники/книги/ресурсы с задачами и просто учебным материалом непосредственно по указателям, не на начальном уровне (как обычно) а чтобы прям мастер класс стать. Потому что как таковых задач не стоит щас на которых можно тренироваться, а выдумывать самому, так ничему не научусь ибо не выдумаю действительно сложные задачи.
Заранее спасибо.
PM MAIL   Вверх
djamshud
Дата 18.9.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



K&R. В православном переводе тоже есть.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
cupper
Дата 18.9.2010, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(djamshud @ 18.9.2010,  12:42)
K&R. В православном переводе тоже есть.

эта книга обо всем 
PM MAIL   Вверх
Cheloveck
Дата 18.9.2010, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 3
Всего: 32



cupper, я как-то хотел, по молодости, написать уроки по C++. Вот держи статью про указатели и ссылки от туда.

Присоединённый файл ( Кол-во скачиваний: 24 )
Присоединённый файл  pointers_and_references_files.zip 19,16 Kb


--------------------
user posted image
PM Jabber   Вверх
cupper
Дата 18.9.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



спасибо, в любой книжке по программированию рассказывается про указатели, а я надеялся найти книгу посвященную только указателям smile Наверно это глупо, буду опять перечитывать всего по чуть чуть.
PM MAIL   Вверх
ИванМ
Дата 19.9.2010, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 1
Всего: 23



Цитата(cupper @  18.9.2010,  15:47 Найти цитируемый пост)
я надеялся найти книгу посвященную только указателям

Указатели не составляют большого объема от всего си. И не являются особо сложной проблемой, как кажется на первый взгляд. по этому отдельных книг по этому вопросу не найдешь. Мой совет - попробуй начать с того, что есть, а потом просто задавай вопросы на этом форуме, если что-то не ясно. Проблема не сложная, разберешься.
PM MAIL   Вверх
hente
Дата 19.9.2010, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 20.3.2009
Где: Томск

Репутация: нет
Всего: нет



Джефф Элджер - Библиотека программиста!
Если осилишь ВСЕ будешь просто гуру кодер  в С++ ))
в этой книге найдешьвсе идеомы с указателями используемые в С++
--------------------
  долой быдло кодеров!!!
PM MAIL   Вверх
cupper
Дата 19.9.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(hente @ 19.9.2010,  09:17)
Джефф Элджер - Библиотека программиста!
Если осилишь ВСЕ будешь просто гуру кодер  в С++ ))
в этой книге найдешьвсе идеомы с указателями используемые в С++

судя по описание отличная книга, да и всего 320 страниц, это не так и много, по сравнение хотя бы со Страуструпом. Спасибо, будет следующая после K&R в прочтении.
PM MAIL   Вверх
cupper
Дата 27.9.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



дошел я значит к K&R до указателей, и до двумерных массивов, и опять наступаю на одни и теже грабли и из книги ничего не почерпнул для того чот бы понимать где эти грабли лежат и как они работают
вот пример:
не могу понять что неправильно в этом объявлении
Код

static char *ptempmas[] = {
            {6, 7, 6},
            {9, 10, 11}
};

надеюсь что хотя бы с вашей помощью я смогу освоить сложную работу с указателями

Это сообщение отредактировал(а) cupper - 27.9.2010, 23:09
PM MAIL   Вверх
Crafty
Дата 27.9.2010, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



cupper,  вы создаете массив из указателей на char и инициализируете их целыми числами. И еще если вы делаете n - мерный массив, то нужно указывать все его размерности, кроме первой явно.
Код
 
  char ptempmas[][3] = {
           {6, 7, 6},
           {9, 10, 11}
  };


Вот так будет выглядеть указатель на 2-мерный массив 2x3, если вы это имели ввиду:
Код

static char (*ptempmas)[2][3] ;


Это сообщение отредактировал(а) Crafty - 28.9.2010, 00:05
PM MAIL   Вверх
Леопольд
Дата 28.9.2010, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 10
Всего: 13



Цитата(hente @  19.9.2010,  09:17 Найти цитируемый пост)
Если осилишь ВСЕ будешь просто гуру кодер  в С++ ))
Сомневаюсь...



--------------------
вопросов больше чем ответов
PM MAIL   Вверх
cupper
Дата 28.9.2010, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



Цитата(Crafty @ 27.9.2010,  23:33)
cupper,  вы создаете массив из указателей на char и инициализируете их целыми числами. И еще если вы делаете n - мерный массив, то нужно указывать все его размерности, кроме первой явно.
Код
 
  char ptempmas[][3] = {
           {6, 7, 6},
           {9, 10, 11}
  };


Вот так будет выглядеть указатель на 2-мерный массив 2x3, если вы это имели ввиду:
Код

static char (*ptempmas)[2][3] ;

нет. Я отталкивался от этого определения
Код

STATIC CHAR *NAME[] = {
    "ILLEGAL MONTH",
    "JANUARY",
    "FEBRUARY",
}

массив указателей на char. строка вида "aaa" есть ничто иное как {'a','a','a','\0'}, в свою очередь каждый символ из этого массива есть ни что иное как однобайтовое число которой можно привести к int.
Ну вот я и решил а что б собсно не сделать так как сделал я. И тут я видимо все перепутал. Выше приведенный массив я понимаю как двумерный с переменным числом элементов в каждой строке, как раз благодаря указателям. С числами видимо такое не канает. И нет иного способа как явно определять сначало
Код

int *mas = new *int[x];

а потом пробегать каждый элемент и делать
Код

mas[i] = new int[y];

Но это же равносильно тому чтобы сделать
Код

int *mas[x];
for(int i=0; i<x; i++)
{
      int TempMas[i];
      mas[i] = TempMas
}

Тобишь я хотел статически определить двумерный массив с переменным числом элементов в каждой строке. Но да я както пропустил тот момент что к первому массиву обращаться можно только так NAME[i] получаем всю строку (адрес первого элемента строки которой храниться в NAME).
Ей богу не понимаю где я ошибаюсь :( Основательно запутался я.

Это сообщение отредактировал(а) cupper - 28.9.2010, 09:48
PM MAIL   Вверх
cupper
Дата 28.9.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



вот пример
Код

char *mas[2];
    int a1[] = {1, 2, 3, 4};
    int a2[] = {5, 6};
for(i=0; i<2; i++)
        printf("%d%c", *((*(mas+i))+1), (i == 1)?'\n':' ');

вывод: 2 6
вот так работает и так все понятно. А вот если пробовать делать
Код

char *mas[] = {{1,2,3,4}, {5,6}}

так массива не инициализаруется как предполагалось (могу предположить что из за того что в mas[] кладется не адрес массивов {1, 2, 3,4} и их элементы)
но для
Код

char *mas[] = {"test", "udertest"}

так работает.
Может кто нить объяснить в чем разница ? И возможно объявить не динамический двумерный массив с переменным числом элементов в строках не типа char* ??? 
Заранее благодарю за обширный ответ smile
PM MAIL   Вверх
Crafty
Дата 29.9.2010, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 3.11.2008

Репутация: 2
Всего: 14



cupper, мне кажется вы не видите разницу между массивом символов и указателем на символьную константу. Почитайте K&R повнимательней.
K&R:
Цитата

Между следующими двумя определениями есть важное различие: 
Код

char amessage[] = "now is the time"; /* массив */ 
char *pmessage = "now is the time"; /* указатель */ 

В первом из них amessage — это массив, ровно такой длины, чтобы в него  
поместилась инициализирующая строка символов и завершающий ' \ 0 '. Отдельные символы 
в строке можно изменять, но переменная amessage всегда будет указывать на один и 
тот же участок памяти. А вот pmessage — это указатель, который после инициализации 
указывает на строковую константу; впоследствии этот указатель можно изменить так, 
чтобы он указывал в другое место, но попытка изменить содержимое строки после этого даст неопределенный резудьтат.


PM MAIL   Вверх
cupper
Дата 29.9.2010, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 525
Регистрация: 29.11.2006

Репутация: 1
Всего: 1



спасибо что уделяете мне время, но нам нужно уточнить не которые вещи, а то толи мы говорим с вами о разном толи я вас очен сильно не понимаю.

Я понимаю разнице между массивом и указателем на массив. 

Код

char *mas[] = {"test", "udertest"}

Здесь  объявлен массив указателей на строки, что можно понимать как двумерный массив.
Запись вида "test" это сокращенная запись {'t', 'e', 's', 't', '\0'}
по крайней мере в тоже K&R так написано для случай инициализации одномерного массива
Код

char mas[] = "test"
// является более компактной записью
char mas[] = {'t', 'e', 's', 't', '\0'}

Из чего у меня и сложилось выше написанное заключение что "test"  = {'t', 'e', 's', 't', '\0'}
Но в случае с указателями "test"  != {'t', 'e', 's', 't', '\0'}, потому что
Код

char *pmas = "test"  // верно
char *pmas = {'t', 'e', 's', 't', '\0'} // неверно

что меня приводит в замешательство. 
Все что выше написано в теме сводиться к этой проблеме.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.