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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2011, 19:28   #1
blacktener
Пользователь
 
Регистрация: 15.12.2010
Сообщений: 78
По умолчанию указатели на массивы и массивы указателей

прочитал много литературы но так толком и не понял.
как обьявить массив указтелей?
как обьявить указатель на массив?
вот это что я обьявляю: ?
int* array[10][10];

И вот если я обьявил просто массив то как мне получить ссылку на этот массив?
int A[10][10];
int* B[10][10];
B = &A;

так правильно?
ответьте пожалуйста а то запутался и не знаю как распутаться
blacktener вне форума Ответить с цитированием
Старый 13.06.2011, 19:39   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Массив указателей:
Код:
int* myPtrs[10];
Указатель на массив:
Код:
int* myPtr;
myPtr = new int[10];
_-Re@l-_ вне форума Ответить с цитированием
Старый 13.06.2011, 19:49   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Массив указателей:
Код:
int *A[10];
Указателем на массив является само имя массива.
Код:
int* array[10][10];
Это двумерный массив указателей на int.

Цитата:
Сообщение от blacktener
И вот если я обьявил просто массив то как мне получить ссылку на этот массив?
int A[10][10];
int* B[10][10];
Здесь A - двумерный массив int'ов, а B - двумерный массив указателей на int.
Цитата:
B = &A;
Это в данном случае бред))

Вообще, в си имя массива - это, по сути, просто указатель на его начало. Двумерный массив - указатель на одномерный массив других указателей, каждый из которых - указатель на (массив) строку получающегося двумерного массива. Если Вам нужен именно указатель на массив типа int [10][10], то сделайте так:
Код:
int A[10][10];
int (*B)[10][10];
B = &A;
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.06.2011, 19:54   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

blacktener\

прочитал много литературы но так толком и не понял.
как обьявить массив указтелей?
как обьявить указатель на массив?


... Указатель на массив:

Код:
int* myPtr;
myPtr = new int[10];

...

А теперь - правильный ответ: :D

Указатель на массив из 10 элементов типа int

int (*arr)[10];



... Указателем на массив является само имя массива. ...

А теперь - правильный ответ: :D

имя массива - не является указателем на первый элемент, а неявно приводится к нему компилятором при использовании в арифметических выражениях
Rififi вне форума Ответить с цитированием
Старый 13.06.2011, 19:55   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
Указателем на массив является само имя массива.
Цитата:
Это двумерный массив указателей на int.
Эмм...Сам себе противоречишь.
_-Re@l-_ вне форума Ответить с цитированием
Старый 13.06.2011, 20:00   #6
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Сообщение от Rififi
имя массива - не является указателем на первый элемент, а неявно приводится к нему компилятором при использовании в арифметических выражениях
Спасибо, не знал. Но в принципе сути это не меняет)
Цитата:
Сообщение от _-Re@l-_
Эмм...Сам себе противоречишь.
Эмм...нет. В первом случае я имел в виду, что вместо указателя на первый элемент массива можно использовать его имя (как нам доходчиво объяснил Rififi, оно приводится компилятором). Во втором написано, что это двумерный массив указателей. Я вообще не вижу в чем противоречие)
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 13.06.2011, 20:02   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

А, да, теперь понял.
_-Re@l-_ вне форума Ответить с цитированием
Старый 13.06.2011, 20:05   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Granus

Но в принципе сути это не меняет)

Да неужели?

int arr[10];
int* p;

&a + 1;
p + 1;

как думаешь, что означают эти две строчки?
и само выражение &a?
Rififi вне форума Ответить с цитированием
Старый 13.06.2011, 20:10   #9
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

&a - адрес переменной a. &a+1 - адрес следующего за переменной a int'a, т.е. скорее всего мусор или еще что-то, если a не элемент массива. p - указатель на int. p+1 - указатель на следующий int после того, на который указывает p.
Разве не так?
Написал, скомпилировал, проверил. Вроде бы так.
Форматируйте код, будьте людьми.

Последний раз редактировалось Granus; 13.06.2011 в 20:14.
Granus вне форума Ответить с цитированием
Старый 13.06.2011, 20:17   #10
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Granus

&a - адрес переменной a

а если бы а было указателем на a[0], то есть на int в данном случае, то почему нельзя так написать?

int** pp = &a;

(:
Rififi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дв.массивы и указатели Марат05 C++ Builder 3 14.04.2011 19:45
Массивы и указатели (С++) slavy Помощь студентам 4 26.08.2009 23:33
Массивы и указатели (С++) slavy Помощь студентам 3 26.08.2009 19:39
Указатели и массивы VladimirVB Общие вопросы Delphi 7 23.08.2009 19:55
[C] массивы, указатели, двойные указатели. Iggel Общие вопросы C/C++ 5 05.05.2009 12:39