0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
||||||
1 | ||||||
Где ошибка в передаче указателя на массив?27.06.2014, 12:48. Показов 1287. Ответов 24
Метки нет (Все метки)
через указатель на массив хочу в массив записать значние -1 или +1. гдето ошибка в синтаксисе. ПРошу помочь. ПОдозреваю что ошибка в самом вызове функции... А конкретней я не правильно из main`a вызываю нужную функцию. НО значения в определении функции и инициализации функции принимаю правлиьно.
Строки 6, 43 и 68
0
|
27.06.2014, 12:48 | |
Ответы с готовыми решениями:
24
Ошибка при передаче в функцию указателя на элемент массива Ошибка Access violation при передаче указателя в функцию При передачи указателя на обьект ошибка,а при передаче ссылки на указатель нет. Почему? Порча указателя при передаче в функцию |
27.06.2014, 12:57 | 2 |
Что означают "В" и "/В"? Если Вы хотите передать указатель на двумерный массив, то это можно сделать так **pNumField.
Здесь у Вас операция взятия индекса уже в имени функции, а не в параметрах.
А здесь та же операция перед объявлением. Очень странно это все выглядит.
0
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
|
27.06.2014, 13:02 [ТС] | 3 |
стрнно про [B] не знаю откуда они взялись...
оно скопирвоалось но в DevC++ этих символов не видно. Что означают **. Как называется операция или это действие? он мне назнакомо.
0
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
|
27.06.2014, 13:08 [ТС] | 6 |
я вижу в коде тоже так написано.. все верно, вопрос откуда взялась эта [B]/// она есть в том коде тч оя опубликовал, но я туда ее не ставил.
0
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
||||||
27.06.2014, 13:27 [ТС] | 8 | |||||
верно -пытался.
массив надо предать статичесский. Без создания динамичесского или создания масива указателей.. Сут ьв том чтоб понять всю кухню передачи статичесского двухмерного массива в функцию. Что для этого надо сделать? 1) Обьявить функцию. Внутри обьявления функции сказать, что я передаю статичесский двухмерный массив. Вот кк я это сделал:
0
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
|
27.06.2014, 13:47 [ТС] | 10 |
Почему?
Добавлено через 2 минуты хорошо вопрос почему можно опустить.... Как павильно теперь записать обьявление функции, вызов и инициализацию...?
0
|
27.06.2014, 13:50 | 11 |
Вы присваиваете указателю неизвестный адрес. Т.к. у Вас массив размерности 3х3, то у него не будет индексов с номером 3. И вопрос, а зачем Вам указатель на последний элемент массива?
0
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
||||||
27.06.2014, 14:02 [ТС] | 12 | |||||
незачем. это ошибка скорее всего.
Хорошо. Мне надо присвоить указателю адрес первого елемента массива... начинаю догонять)
0
|
27.06.2014, 14:04 | 13 | |||||
Проверяйте
1
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
|
27.06.2014, 14:09 [ТС] | 14 |
Работает, только пока не все понятно. Надо Грызть гранит науки)
не совсем понятна 85 и 91 строки, точнее первый раз вжу такую форму записи. Кири спасибо. Сейчас постараюсь разобраться.
0
|
2 / 2 / 2
Регистрация: 19.06.2014
Сообщений: 17
|
||||||
27.06.2014, 14:19 | 15 | |||||
Можно передать указатель на указатель в функцию, но в таком случае нужно будет динамически создать массив (и потом его удалить).
0
|
27.06.2014, 14:21 | 16 | |||||
Всегда читайте и пытайтесь понять, что от Вас хочет компилятор, выдавая ошибки.
1
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
||||||
27.06.2014, 15:00 [ТС] | 17 | |||||
Указатель на указатель и динаммичесский массив. это пока еще слишком круто, я тольк овчера прочитал материал по этой теме. Сейчас надо взять и досконально разобраться с указателями на статичесский массив. ПОтом переписать программу с перечадей массива без указателя., потом переписать с передачей указателя на динамичесский массив. потом еще чтото придумаю.)
Кирил, у меня такой вопрос. с Чего начать/подойти.... как правильно искать ошибки в программе или понять что требует копилятор? Например я читаю и понимаю что он выдает н окак исправить... МОжнт можно как шаг за шагом смотреть за выполнением программы строчка за строчкой, символ за символом... чтоб понять где логика или синтаксис начинают давать сбой?! Добавлено через 15 минут Непонятно почему
int Arr[2][5]= {{1,2}, {3,8}, {3,5}, {8,1}, {6,4}}... тоесть это строки. 5 строк(как отдельные блоки можно себе представить) и в каждой строке по 2 эллемента(строчки из 2 ячеек памяти.) в нашем выражении i это счетчик в высоту массива(нумерует количество или порядок СТРОЧКИ массива). и k это счетчик которые задает длинну эллемента массива(можно сказать считает горизонтально, положение елемента в массиве) вот пример: int Arr[2][5]= { {i=0, к=0: тут значение 1, i=0, к=1: тут значение 2}, {i=1, к=0: тут значение 3, i=1, к=1: тут значение 8}, {i=2, к=0: тут значение 3, i=2, к=1: тут значение 5}, {i=3, к=0: тут значение 8, i=3, к=1: тут значение 1}, {i=4, к=0: тут значение 6, i=4, к=1: тут значение 4} }... ...+ k это какойт опереключатель? на пальцах.... не могу понять...
0
|
2 / 2 / 2
Регистрация: 19.06.2014
Сообщений: 17
|
|
27.06.2014, 16:36 | 18 |
MMt, двумерные массивы в памяти записываются строка за строкой, то есть все элементы таких массивов хранятся друг за другом. Например, если у нас есть массив array[2][2] = {{1, 2}, {3, 4}}, то в памяти элементы этого массива будут храниться в таком виде [1][2][3][4].
(pNumField + i*s + k) - это формула, по которой рассчитывается положение в памяти определённого элемента, то есть указатель на элемент array[i][k], pNumField - указатель на массив (то есть на него начало), а s - количество строк. А *(звёздочка) - это операция разименования указтеля, то есть получения значения, которое хранится в ячейке памяти, куда указывает указатель.
1
|
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 185
|
|
27.06.2014, 17:08 [ТС] | 19 |
MMt, двумерные массивы в памяти записываются строка за строкой, то есть все элементы таких массивов хранятся друг за другом. - понятно.
Например, если у нас есть массив array[2][2] = {{1, 2}, {3, 4}}, то в памяти элементы этого массива будут храниться в таком виде [1][2][3][4]. - понятно (pNumField + i*s + k) - это формула, по которой рассчитывается положение в памяти определённого элемента - понятно. то есть указатель на элемент array[i][k] - НЕ ПОНЯТЕН СМЫСЛ ЭТОЙ ФРАЗЫ. pNumField - указатель на массив (то есть на него начало), а s - количество строк.- понятно А *(звёздочка) - это опsрация разыменования указтеля, то есть получения значения, которое хранится в ячейке памяти, куда указывает указатель. - понятно. вот еще такой момент (pNumField + i*s + k) тут имееться в иду умножить? или * ставиться как указатель на чтото...? Добавлено через 15 секунд блин как туго идет) Добавлено через 7 минут я не пойму какая переенная что счелкает.... массив это матрица(квадрат прямоугольник, прямая с равнымыми частями...) 01. 02. 03. 04. строка это в длинну. 05. 06. 07. 08. столбец это в высоту. 09. 10. 11. 12. или так выразить можно (01, 02, 03, 04)(05, 06, 07, 08)(09, 10, 11, 12) какая переменная как переключает доступ к ячейке....
0
|
2 / 2 / 2
Регистрация: 19.06.2014
Сообщений: 17
|
|
27.06.2014, 17:26 | 20 |
здесь i * s - это умножение
если вывести на экран результат вот этой формулы (pNumField + i*s + k) - это будет адрес элемента i x k, то есть если взять пример твоего массива и в этой формуле подставить вместо i = 2, k = 1, а s будет равен количеству строк в массиве, то есть s = 3, то (pNumField + i * s + k) = (pNumField + 2 * 3 + 1) - будет указывать на элемент 07, а *(pNumField + 2 * 3 + 1) (разыменование этого указателя) будет равно 7, то есть i - это строка, а k - это столбец. Только надо учесть, что в C++ элементы считаются начиная с 0, а не с 1, как это делается в алгебре.
0
|
27.06.2014, 17:26 | |
27.06.2014, 17:26 | |
Помогаю со студенческими работами здесь
20
Использование указателя при передаче параметра Ошибки преобразования при передаче указателя на функцию Функция требующая ссылку компилируется при передаче ей указателя При передаче указателя в качестве аргумента функции теряется значение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |