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

Указатели и непонятки в одном флаконе! - C++

Восстановить пароль Регистрация
 
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
30.09.2011, 16:43     Указатели и непонятки в одном флаконе! #1
Здравствуйте. Решил поднять новую тему про указатели. Да, литературу читал, но нихрена не понятно. Конечно, базовые концепции - не оч трудно, но работа с многомерными массивами - это п****ц. Сорри, просто мозги уже кипят.
Короче вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream.h>
#include <conio.h>
 
main ()
{
   int a[2][2][2] ={{{1,2},{4,5}},{{1,2}}};
   int *(*ptr)[2];
 
   ptr[0] = a[0][0];
   ptr[1] = a[0][1];
 
   cout << "a[0][0] = " << a[0][0] << " == ptr[0] = " << ptr[0]
    << endl << endl;
 
   getch();
 
   return 0;
}
Выдаёт ошибку "LValue required" в 9 и 10 строке. А почему? ptr[0] - указатель. a[0][0] - тоже указатель. Но всё же присвоение не прокатывает. Итак, я хочу услышать не только правильное исправлени, но и ОБЪЯСНЕНИЕ ДЛЯ ЧАЙНИКОВ КАК ЭТО РАБОТАЕТ.

P.S. Повторюсь, мне не нужна просто моя исправленная программа, мне нужно объяснение!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2011, 16:43     Указатели и непонятки в одном флаконе!
Посмотрите здесь:

Непонятки с кодом. C++
Составить программу, которая находит минимальный элемент и все элементы, расположение в одном ряду и в одном столбце с минимальным меняет на минимальн C++
C++ Непонятки с fread
C++ непонятки
Написать программу, создающую два потока, которые выполняются в одном адресном пространстве (в одном процессе) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4928 / 2671 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
30.09.2011, 16:49     Указатели и непонятки в одном флаконе! #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <conio.h>
 
int main ()
{
   int a[2][2][2] ={{{1,2},{4,5}},{{1,2}}};
   int *ptr[2];
 
   ptr[0] = a[0][0];
   ptr[1] = a[0][1];
 
   std::cout << "a[0][0] = " << a[0][0] << " == ptr[0] = " << ptr[0]
        << std::endl << std::endl;
 
   getch();
 
   return 0;
}
Неправильно объявлен массив указателей
Петррр
 Аватар для Петррр
5917 / 3354 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
30.09.2011, 16:52     Указатели и непонятки в одном флаконе! #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main ()
{
   int a[2][2][2] ={{{1,2},{4,5}},{{1,2}}};
   int *ptr[2];
   ptr[0] = a[0][0];
   ptr[1] = a[0][1];
   cout << "a[0][0] = " << a[0][0] << "\n ptr[0] = " << ptr[0]
        << endl << endl;
   system("pause");
   return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
30.09.2011, 16:52     Указатели и непонятки в одном флаконе! #4
Цитата Сообщение от dimcoder Посмотреть сообщение
int *(*ptr)[2];
- это указатель на строку из двух элементов а не отдельный её элемент
от компилятора идёт такое сообщение error C2440: '=' : cannot convert from 'int [2]' to 'int *[2]'

Цитата Сообщение от dimcoder Посмотреть сообщение
ptr[0] = a[0][0];
*ptr[1] = a[0][1];
Петррр
30.09.2011, 16:52
  #5

Не по теме:

Опоздал

-=ЮрА=-
30.09.2011, 16:56
  #6

Не по теме:

Цитата Сообщение от Петррр Посмотреть сообщение
Не по теме:
Опоздал
- я вообще наивно полагал что первым успею ответить
PS:Когда раздел С/С++ глядят сразу 200 пар глаз сложно вообще на первой странице успеть отпостить

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2011, 17:22     Указатели и непонятки в одном флаконе!
Еще ссылки по теме:

Хочу EXE и DLL в одном флаконе. Не получается. C++
Непонятки с синтаксисом C++
C++ непонятки с for

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

Или воспользуйтесь поиском по форуму:
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
30.09.2011, 17:22  [ТС]     Указатели и непонятки в одном флаконе! #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- это указатель на строку из двух элементов а не отдельный её элемент
от компилятора идёт такое сообщение error C2440: '=' : cannot convert from 'int [2]' to 'int *[2]'
Я думал, что енто означает, что объявляю массив указателей ptr из 2 элементов, каждый из которых содержит указатель на (int *), а не int. Поэтому с этого места можно поподробнее. Короче опять нихрена не понятно...
Ну и если мы заговорили о строках, то вот вам попутный вопрос:
C++
1
2
char *string;
*string = "smth"
и "smth" запишится в случайную область памяти, что может привести к неприятным последствиям или эта запись эквивалентна:
C++
1
char string[10] = "smth";
Yandex
Объявления
30.09.2011, 17:22     Указатели и непонятки в одном флаконе!
Ответ Создать тему
Опции темы

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