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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
#1

Указатель на двумерный массив - C++

02.12.2011, 11:44. Просмотров 2610. Ответов 23
Метки нет (Все метки)

Допустим, у меня есть функция:

C++
1
2
3
4
void A(float **b)
{
b[0][0]=1;
}
Тогда почему выдает ошибку при следующем:

C++
1
2
3
const int a=100;
float b[a][a];
A(b);
Сама ошибка:
"невозможно преобразовать параметр 4 из 'float [100][100]' в 'float **'"

Помогите разобраться, и скажите, как было бы правильно, пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2011, 11:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на двумерный массив (C++):

указатель на двумерный массив - C++
Делая игру морской бой, я столкнулся с 1-ой проблемой: void place_ships(char &(&(map+13)+29)) //или (char **map) или (char &map) или...

Указатель на двумерный массив - C++
Здравствуйте. Подскажите пожалуйста, а существуют ли в C/C++ указатели: 1) на двух-трёхмерные массивы 2) на массивы из строк...

Указатель на двумерный массив - C++
Как сделать то же самое с двумерным массивом? Как работать с двумерными или n- мерными массивами через указатель? #include <iostream> ...

Указатель на двумерный массив - C++
A эквивалентно *(*(A+i)+j). Просто давайте допустим, что у нас матрица A. Как вычислить допустим А?

Указатель на двумерный массив - C++
хочу заменить вот такую запись: fs.read((char*)&size_struct, sizeof(int)); fs.read((char*)&size_arr, sizeof(int)); char * item0 =...

Двумерный массив через указатель - C++
как вывести двумерный массив через указатель? с одномерным понятно,а как так же с двумерным сделать? int a = { 1, 2, 3, 4, 5 }; ...

23
Сыроежка
Заблокирован
02.12.2011, 20:28 #16
Цитата Сообщение от AncinetHero Посмотреть сообщение
Спасибо, но мне это уже обьясняли...

Меня больше интересует

Не по теме:

Причем число a я считываю, вообще не имею понятия как в .h его засунуть =\



Или можно ли сделать так, чтобы функция была для массивов любых размеров? (поэтому и хотел сделать **b)

Добавлено через 1 час 22 минуты
Ап :cofee2:
Вы выделяете память следующим образом

C++
1
float **b = new *float[a];
а затем для каждого элемента выделенного в памяти массива в свою очередь выделяете в памяти массив

C++
1
for ( int i = 0; i < a; i++ ) b[i] = new float[a];
В функцию вам надо описать два параметра: указатель на указатель на тип float и целочисленное значение, задающее размер массива

C++
1
void h( float **b, int a );
0
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
02.12.2011, 20:41  [ТС] #17
А есть способ обьявить этот массив в начале кода программы?
0
Сыроежка
Заблокирован
02.12.2011, 20:48 #18
Цитата Сообщение от AncinetHero Посмотреть сообщение
А есть способ обьявить этот массив в начале кода программы?
Это не объявление массива. Это объявление указателя на указатель на float Сам массив в памяти вы организуете посредством выделения памяти. Поэтому эти операторы выделения памяти вы можете использовать в теле какой-нибудь функции, включая функцию main
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2011, 20:52 #19
Компилятор должен знать, на сколько делить массив (так как двумерный массив хранится в памяти как одномерный)

1-ый вариант
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define ROWS 100
#define COLUMNS 10
 
...
 
void fun1 (int arr[][COLUMNS])
{
...
}
 
...
 
 
int arr[ROWS][COLUMNS];
 
 
 
fun1 (arr);
...
2-ой вариант


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// динамический массив
...
void fun1 (int *arr)
{
 
...
 
}
 
...
 
int ** arr;
 
...
 
fun2 (arr);
...
0
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
02.12.2011, 21:38  [ТС] #20
Почему программа ругается на:
C++
1
2
3
4
struct C{
    float **b=new *float [a];
    for(int i=0;i<a;i++)b[i]=new float[a];
}
Начинается ругань с
C++
1
new *float [a];
0
Сыроежка
Заблокирован
02.12.2011, 21:43 #21
Цитата Сообщение от AncinetHero Посмотреть сообщение
Почему программа ругается на:
C++
1
2
3
4
struct C{
    float **b=new *float [a];
    for(int i=0;i<a;i++)b[i]=new float[a];
}
Начинается ругань с
C++
1
new *float [a];
Потому что в структуре не могут использоваться предложения с выполнением кода. Структура может состоять из объявлений и/или определений данных и функций.
0
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
02.12.2011, 21:54  [ТС] #22
В этой строке в любом случае есть ошибка, все равно где она находится.

C++
1
float **b = new *float [a];
А именно ошибка в звездочке тут:
C++
1
new *float [a];
Какая? о_О
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2011, 22:00 #23
Цитата Сообщение от AncinetHero Посмотреть сообщение
float **b = new *float [a];
C++
1
2
float **b ;
b =  new float * [a];
0
aeshes
440 / 203 / 13
Регистрация: 07.10.2011
Сообщений: 462
02.12.2011, 22:01 #24
звездочка должна быть после типа, а не перед
C++
1
float **mas = new float* [a];
0
02.12.2011, 22:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2011, 22:01
Привет! Вот еще темы с ответами:

Указатель на двумерный массив и выше - C++
Всем привет!Сразу к делу. Я решил по лучше разобраться в указателях и столкнулся с таким вопросом как реализовать такую вещь именно так...

Указатель на двумерный массив указателей - C++
char* err = {{&quot;abc&quot;}, {&quot;def&quot;}}; char ***ptr; ptr = (char ***)err; printf(&quot;%s, %s&quot;, *err + 2, *ptr + 2);Добрый день всем, есть...

Указатель на двумерный массив символов - C++
Доброго времени суток. Особо не сталкивался со строками, но сейчас возникла необходимость, так же возникли и проблемы. Пытаюсь...

Функция, возвращающая указатель на двумерный массив - C++
Добрый день! Столкнулся с конструкцией которую раньше не видел, и не до конца понимаю что это и как работает: #include &lt;stdio.h&gt; ...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru