493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
1

Использование адреса массива как параметра цикла в функции

07.05.2011, 16:48. Показов 808. Ответов 3
Метки нет (Все метки)

При выполнении вылетает сообщение об ошибке и аварийное завершение. Что не так в этой функции?

C
1
2
3
4
5
//Функция возведения в квадрат массива.
void power(int size, float * ar) // параметры: размер и указатель на нулевой адрес массива 
{    
    for( ;ar <= &ar[size]; ar++ )  *ar *= *ar; // использование адреса массива в кач параметра цикла
}
а через указатель всё получается:
C
1
2
3
4
5
6
//Функция возведения в квадрат массива с использованием вспомогательной переменной-указателя. 
void power(int size, float * ar)
{    
    float * ptr=ar;
    for( ;ptr <= &ar[size]; ptr++ )  *ptr *= *ptr; // доступ к массиву через указатель
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2011, 16:48
Ответы с готовыми решениями:

Использование массива, как параметра функции
Нашёл данную статью https://www.cyberforum.ru/cpp-beginners/thread1634378.html и заинтересовался,...

Использование массива как параметра функции
Ребята, невероятно срочно нужна помощь с программой) &quot;Для получения результата составить...

Использование массива как параметра функции
Для получения результата составить функцию, исходными данными которой являются два массива X1, X2,...

Использование массива как параметра функции
Для получения результата составить функцию, исходными данными которой являются два массива Х1,...

3
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,635
07.05.2011, 17:16 2
Потому, что в первом случае эта херь
C++
1
&ar[size];
Постоянно увеличивается, напиши так:

C
1
2
3
4
5
6
7
8
9
void power(int size, float * ar) 
{    
    for( ;ar <= &ar[size]; ar++ ) {  
     *ar *= *ar; 
      printf ("&ar[size]= %x\n", &ar[size]);
      printf ("ar+ 1= %x\n", ar+ 1);
     getchar ();
    }
}
И всё поймёшь.
0
18 / 18 / 7
Регистрация: 07.11.2010
Сообщений: 136
07.05.2011, 18:17 3
C++
1
  for( ;ar < ar+size; ar++ )
вот так будет понятней
у тебя нет доступа к елементу ar[size] нельз его трогать в цикле...
0
493 / 426 / 56
Регистрация: 29.04.2011
Сообщений: 443
07.05.2011, 18:46  [ТС] 4
kravam,mansp, Спасибо, теперь понятно! Значит всё же можно использовать адрес массива как параметр, просто надо "зафиксировать" адрес последнего элемента.
по идее, если сделать так, то должно получиться.

C
1
2
3
4
5
void power(int size, float * ar) 
{   
    float * ptr=&ar[size]; // или ptr = ar+size;
    for( ;ar <= ptr; ar++ )  *ar *= *ar; 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2011, 18:46

Использование имени массива как параметра функции
Для получения результата разработать алгоритм и программу, содержащую функцию, исходными данными...

Использование функции как параметра другой функции
В задании указано, что функция P прибавляет значение функции ff к элементу массива, если он входит...

Как передать значение параметра функции одного экзешника значению параметра функции другому екзешнику?
Здравствуйте! Ребята подскажите по такому вопросу. У меня есть консольное приложение в...

Тело какого из перечисленных операторов цикла выполняется как минимум один раз, независимо от значения параметра цикла
Оператор цикла, тело которого выполняется как минимум один раз независимо от значения параметра...

Передача массива как параметра функции
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; int _tmain(int argc, _TCHAR* argv) { int b;...

Передача массива как параметра функции
известно что, если нужно изменить значение переменной(а ни ее копии в стеке) нужно передать ее...


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

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

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