Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 10.06.2019
Сообщений: 21
1

Указатель, ссылки, массив. C++

31.07.2019, 17:54. Показов 1749. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток. Хотел задать вопрос.

Почему без ухищрений нельзя передать статический массив в функцию при помощи указателей .

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void func2(int (*a)[4])
{
   cout << a[0][0] << endl;
}
 
void func3(int (*&a)[4])
{
   cout << a[0][0] << endl;
}
 
main ()
{
   clrscr();
 
   int b[3][4];
 
   b[0][0] = 123;
 
 
   
   func2(b);
   func3(b);

А динамический можно...
C++
1
2
3
4
5
6
7
8
9
int func(int * arr, int n)
{
    ...
}
 
...
 
int * array = new int[20];
func(array,20);
Зато при помощи ссылки легко можно передать статический...



C++
1
int ** transp(int ** M, int a, int b)
Пытался просто передать как int ** array int A[3][4]; transp(A, 3, 4);

[Error] cannot convert 'int (*)[3]' to 'int**'



Почему просто нельзя передать указатель на статический массив, как получилось с динамическим?


Чем тогда отличается указатель на статический массив от указателя на динамический?

Добавлено через 12 минут
Зато при помощи ссылки легко можно передать статический...


void transp(int (&arr) [5])
{
...
}

int main ()
{
int arr[5]={0};
transp(arr);
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2019, 17:54
Ответы с готовыми решениями:

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++. Условие:Реализовать 3 функции,...

Указатель на функцию, которая принимает в качестве параметра указатель на массив
я не понимаю. вроде делаю правильно, но выходит ошибка. есть функция. int foo(int *mas){};...

Передача ссылки на указатель
Доброго времени суток. Столкнулся с проблемой. Мне нужно передать в качестве параметра 2 ссылки на...

Возврат ссылки на указатель из функции
#include &lt;iostream&gt; int*&amp; getPtrRef(int*&amp; ref) { int*&amp; cpy = ref; std::cout &lt;&lt; &amp;ref...

8
Заблокирован
31.07.2019, 17:59 2
в чем проблема?
C++
1
2
3
4
5
6
7
void func(int a[][4],int n)
{
}
void main(int argc,char **argv)
{
    int a[3][4];
    func(a,3);
статический массив это один непрерывный кусок памяти
0
зомбяк
 Аватар для TRam_
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.07.2019, 18:03 3
Статический двухмерный массив представляет собой непрерывный блок данных, а динамический двумерный массив - представляет собой массив указателей, которые указывают на выделенные случайным образом в памяти одномерные массивы каждой из строк. Указателями превратить одно в другое нельзя.
1
1 / 1 / 0
Регистрация: 10.06.2019
Сообщений: 21
31.07.2019, 18:05  [ТС] 4
int ** transp(int ** M, int a, int b)
Пытался просто передать как int ** array int A[3][4]; transp(A, 3, 4);

[Error] cannot convert 'int (*)[3]' to 'int**'



Почему просто нельзя передать указатель на статический массив, как получилось с динамическим?


Чем тогда отличается указатель на статический массив от указателя на динамический?
Вот проблемы...
0
зомбяк
 Аватар для TRam_
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.07.2019, 18:10 5
Пиши две разные функции, либо функцию - обёртку для статического массива, которая будет создавать внутри себя массив указателей на первые элементы статического массива, и уже после этого передавать функции, работающей с указателем на указатель.
0
Заблокирован
31.07.2019, 18:14 6
видимо либо так
C++
1
2
3
4
5
6
7
8
9
void func(int *a,int n,int m)
{
}
void main(int argc,char **argv)
{
    int a[3][4];
    func((int*)a,3,4);
    int *b=new int[3*4];
    func(b,3,4);
0
зомбяк
 Аватар для TRam_
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
31.07.2019, 18:18 7
Ну да, динамический массив можно создавать и одним куском, так получится более оптимизировано.
0
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
31.07.2019, 22:30 8
Лучший ответ Сообщение было отмечено GribBob как решение

Решение

GribBob, Преобразование имени массива в указатель
1
Эксперт С++
 Аватар для hoggy
8972 / 4318 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
31.07.2019, 23:09 9
Цитата Сообщение от TRam_ Посмотреть сообщение
Статический двухмерный массив представляет собой непрерывный блок данных, а динамический двумерный массив
точно такой же двухмерный массив.
только расположенный в динамической памяти.
1
31.07.2019, 23:09
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.07.2019, 23:09
Помогаю со студенческими работами здесь

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив)
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая...

Динамический массив и указатель на указатель
Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив...

Указатели и ссылки. Имя массива как указатель
7. Дан одномерный массив, состоящий из N целочисленных элементов. 7.1. Ввести массив с клавиатуры....

Изменение константной ссылки в обычную или указатель
Добрый день, вопрос в названии темы. Как из константной ссылки получить обычную или указатель...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO / / https:/ / leetcode. com/ studyplan/ top-interview-150/ package topInterview . . .
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации. Исполнитель Чертежник работает на координатной плоскости, где может. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru