C/C++

ИЗУЧАЮ С++ ЧТО ЗА ОШИБКА?

double degr[360]; // Получает значение
Azamat Ormahaev
Azamat Ormahaev
85 060
Лучший ответ
Нет элемента массива с индексом 359. Последний элемент имеет индекс 368. В C++ обычно три пишем, два в уме ;) Хотя зачем тут вообще массив, я не знаю :)
Андрей Ракшин
Андрей Ракшин
70 892
Что такое массив?
Массив это просто указатель (адрес в памяти (число)) который указывает на начало твоего массива. в твоем случаее помимо указателя ты обьявил агрегат который будет лежать на стеке но не суть. по факту переменная degr это указатель.
(x) (y) (z) (w)
-^---------------
скажем вот, массив и снизу указатель.
указатель указывает на первый элемент массива.
чтобы получить первый элемент массива нужно сдвинуть указатель на 0 в право.
*(degr + 0) = 414124.414;
или
degr[0] = 313231.1241;
или
0[degr] = 124124124.1424;
как видишь методов сдвига указателей несколько и два из них сразу возращяют контекст переменной внутри массива.
чтобы получить указатель на второй элемент нужно сдвинуть указатель на еденицу в право.
(x) (y) (z) (w)
------^----------
*(degr + 1) = 414124.414;
или
degr[1] = 313231.1241;
или
1[degr] = 124124124.1424;
теперь когда ты понял что массив в С++ по определению это указатель на первый элемент в массиве ты должен понять что
в твоем случае ты выходишь за пределы массива получая данные в за его пределами/
double degr[359]; // Получает значение

for (int i = 0; i <= 359; i++) {
rot = rot + 1;
degr[i] = cos(rot * PI / 180);
cout << degr[i] << endl;
}
и да при обьявлении агрегата как масива на N элементов указывается количество елементов
например
double salo[5];
это будет такой масив
(x) (y) (z) (w) (u)
-^------------------
salo[4] == u
salo[0] == x
так-же получив адрес на любую переменную (не агрегат)
ты сможешь представить ее как массив из одного елемента
double privet = 0.4;
double* salo = &privet;
for (int i = 0; i < 1; i++) {
std : : cout << salo[i];
}
так-же ты можешь немного взломать жизнь
и обьявив две переменные
double x;
int y;
получить на них адреса.
char* s = reinterpret_cast < char* > ( &x );
char* v = reinterpret_cast < char* > ( &y );
и вывести растояние на котором они лежат друг от друга
std::cout << s - v;
Kirill Yakovlev "вывести расстояние на котором они лежат друг от друга", почему все время результат 12?
Kirill Yakovlev разобрался