и статическая(dmatrix,smatrix).Я хочу работать с ними в функции,непосредственно.Вопрос:функция принимает статичексую матрицу в качестве параметра так(&smatrix[0][0]),а динамическую так(dmatrix), и обращаеся к елементам статичексой так(smatr[i*rows+j]),динамической[i][j],по причине того,что эти две матрици по разному расположены в мамяти?То есть в статической(один елемент з другим), а в динамической елементы разбросаны в памяти?Скорректируйте если не верно,пожалуйста.
Если используете сырые указатели для реализации матрицы, то да, каждый ряд матрицы не обязан быть смежным другому в памяти
то есть я правильно понял?Функция принимает их в качестве переметров по рпзному и работает с ними тоже оп разному из за резличий в расположении этих матриц в памяти,так?
В первом сообщении непонятно как вы принимаете матрицы. Но способ индексирования может отличатся, да
вот так: function(&smatrix[0][0],dmatrix,rows,cols);
Что за динамические Матрицы ещё?
Термины "статический", "динамический" в языках С/С++ имеют вполне определённые значения. Матрица как тип объекта не может менять свой тип в зависимости от того, как она создана, как статический или как динамический объект, в функции она будет передаваться одинаково.
Тут наверное ты имел в виду разницу в типах, многомерный массив или массив массивов. Да, они разные по расположению элементов в памяти, но что там у тебя, не понятно, скорее это многомерный массив.
Если используете сырые указатели для реализации матрицы, то могут иметь место оба варианта, расположение всех элементов матрицы в смежных адресах, либо расположение только элементов строк матрицы в смежных адресах. Так было бы верно
Я вроде так и написал)
Ну, использование сырых указателей тут не определяет вообще ничего. Поэтому странно такое читать. Смартпоинтеры могут указывать тоже на любой тип данных
Мы говорим про следующую ситуацию: int** mat = new int*[n]; for(int i = 0; i < n; ++i) mat[i] = new int[m]; Выделяемые массивы как могут так и нет быть смежными в памяти
Єто просто две двумерные матрици.Одна статическая(в моем понимании это когда я сразу обозначил сколько в ней столбцов и рядков и менять не планирую) другая динамическая(я выделил определённое кол-во памяти в куче и в любой момент могу его изменить).Вот.И вопрос был в том,что мне было не понятно почему мы их по разному принимаем в качестве параметров в функцию и по разному обращаемся к их элементам в той же функции.Но,как я понял,это из-за разного расположения в памяти.Надеюсь понял верно.
Ну мне как в учебном учреждении сказали,так я это и называю😅.Имелась в виду 2Д матрица под которую выделана память в куче.
Первое - массив массивов(один тип данных), второе - указатель на указатель(другой тип). Поэтому по разному передается, но обрабатывать можно одинаково(matrix[i][j]). Так вроде понятнее
Да,спасибо.Но это если не в функции.Если де работать с этими разными типами в функции,то компилятор выдаёт ошибку.Скорее всего я что-то не понимаю,но в функции одинаково к разным типам у меня обратиться не выходит.
Про наименование усвоил,спасибо
Просто почитайте как устроены массивы и указатели в с++
У тебя всё в голове перемешалось наверно. Динамическая - это как раз выделенная в куче, а какая она по структуре - дело совсем другое
выглядит как херовый код просто - скинь больше кода
Пофиг, в функции или нет
Вполне вероятно
Передавай массивы по ссылке в функции, и будет всё пофиг
Обсуждают сегодня