0 / 0 / 0
Регистрация: 20.10.2017
Сообщений: 41
1

Массив на 10 элементов нужно заполнить случайными числами через указатели

20.10.2017, 15:43. Показов 3891. Ответов 12
Метки нет (Все метки)

Здравствуйте, помогите новичку решить несложную задачу. Только начал осваивать указатели и понимаю, что мой код неправильный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int a[10];
    int *x = &a[10];
 
    for (int i = 0; i < 10; i++)
 
    {
        cin >> *x[i];
        
    }
 
    cout << endl;
    for (int i = 0; i < 10; i++)
 
    {
        cout << a[i] << " ";
    }
 
    cout << endl;
}
но исходил из того, что если в выражении
int a = 3;
int *x = &a;
*x = 7;

меняется значение а через указатель х, то и в массиве также.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2017, 15:43
Ответы с готовыми решениями:

Нужно заполнить массив 10 случайными числами и построить график
Заполните массив десятью случайными целыми числами, каждое из которых лежит в пределах от 50 до...

Заполнить массив из 10 элементов случайными числами
1)Заполнить массив из 10 элементов случайными числами в интервале и найти в нем максимальный и...

Заполнить массив из 12 элементов случайными числами
Заполнить массив из 12 элементов случайными числами в интервале от -12 до 12 и выполнить...

Заполнить массив из 10 элементов случайными числами
Заполнить массив из 10 элементов случайными числами в интервале от 0 до 10 и отсортировать его по...

12
Заблокирован
20.10.2017, 15:48 2
Цитата Сообщение от doom88 Посмотреть сообщение
int *x = &a[10];
for (int i = 0; i < 10; i++)
{
cin >> *x[i];
убрать
1
0 / 0 / 0
Регистрация: 20.10.2017
Сообщений: 41
20.10.2017, 16:06  [ТС] 3
спасибо)
int *x = &a[10] это я так понимаю вообще абсурд написал, "указатель на адрес переменной"?
0
Заблокирован
20.10.2017, 16:12 4
удачный цвет, &a[0] можно было б
0
663 / 4163 / 259
Регистрация: 11.08.2016
Сообщений: 2,780
20.10.2017, 16:12 5
Или
C++
1
2
3
4
5
6
int *x = &a[10];
for (int i = 0; i < 10; i++)
{
cin >> *x;
x++;
}
1
0 / 0 / 0
Регистрация: 20.10.2017
Сообщений: 41
20.10.2017, 16:19  [ТС] 6
извините, с цветом не угадал)

&a[0] это значит, что заполнение в цикле начинается с 0 элемента?

в этом примере правильно понимаю?

C++
1
2
3
4
5
6
int *x = &a[10];            // указатель на весь массив из 10 элементов?
for (int i = 0; i < 10; i++)
{
cin >> *x;     // непосредственно вводим элементы массива через указатель?
x++;             // переход по элементам в массиве через указатель?
}
0
Заблокирован
20.10.2017, 16:21 7
это указатель на 0-й элемент, который совпадает с началом массива
1
0 / 0 / 0
Регистрация: 20.10.2017
Сообщений: 41
20.10.2017, 19:55  [ТС] 8
спасибо) ну а второй пример я правильно понял? комментарии мои

int *x = &a[10]; // указатель на весь массив из 10 элементов?
for (int i = 0; i < 10; i++)
{
cin >> *x; // непосредственно вводим элементы массива через указатель?
x++; // переход по элементам в массиве через указатель?
0
Заблокирован
20.10.2017, 19:57 9
Цитата Сообщение от doom88 Посмотреть сообщение
int *x = &a[10];
ошибка
0
$ su
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
20.10.2017, 20:01 10
Вы же понимаете, что своим кодом вы говорите, возьми адрес 10 элемента и положи в x?

Добавлено через 1 минуту
Если я правильно понял то вам нужно получить адрес 0 элемента(то есть адресс начала) и дальше адресной арифметикой шагать, например x++ и вы уже на следующем элементе.
0
0 / 0 / 0
Регистрация: 20.10.2017
Сообщений: 41
20.10.2017, 20:05  [ТС] 11
понятно, спасибо)
0
$ su
1605 / 520 / 97
Регистрация: 18.11.2010
Сообщений: 2,807
Записей в блоге: 2
20.10.2017, 20:22 12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
 
int main() {
  const int size = 10;
  int a[10];
  int *x = &a[0];
 
  for (int i = 0; i < 10; i++){
    cin >> *x;
    x++;
  }
 
  cout << endl;
  for (int i = 0; i < 10; i++)
  {
    cout << a[i] << " ";
  }
 
  cout << endl;
}
https://repl.it/MyV9
например так

Добавлено через 13 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;
 
int main() {
  const int size = 10;
  int a[10];
  int *x = &(a[0]);
 
  for (int i = 0; i < 10; i++){
    cin >> *(x+i);//тоже самое что и снизу но без сахара
    cin >> x[i];//тоже самое что и сверху просто это такой сахар
    //----Доругой подход----//
    cin >> *x;//записываем в текущий адрес
    x++;//инкрементируем и в x уже лежит следующий адрес
  }
 
  cout << endl;
  for (int i = 0; i < 10; i++)
  {
    cout << a[i] << " ";
  }
 
  cout << endl;
}
Немного комментов
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 932
20.10.2017, 21:08 13
p = &mas[0] - присваиваем указателю адрес первого элемента массива. Чтобы вывести всё содержимое массива шагаем указателем с помощью ptr++ по массиву
Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    const int size = 5;
    int mas[size];
    int *ptr;
    for(int i = 0; i < size; ++i) std::cin >> mas[i];
 
    ptr = &mas[0];
    for(int i = 0; i < size; ++i)
    {
        std::cout << *ptr << ' ';
        ptr++;
    }
}
p = &mas[4] - присваиваем указателю адрес последнего элемента массива. Чтобы вывести всё содержимое массива шагаем указателем с помощью ptr--(задом на перёд) по массиву.
Вот пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main()
{
    const int size = 5;
    int mas[size];
    int *ptr;
    for(int i = 0; i < size; ++i) std::cin >> mas[i];
 
    ptr = &mas[4];
    for(int i = 0; i < size; ++i)
    {
        std::cout << *ptr << ' ';
        ptr--;
    }
}
Можно "поставить" указатель в середину массива
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
int main()
{
    const int size = 5;
    int mas[size];
    int *ptr;
    for(int i = 0; i < size; ++i) std::cin >> mas[i];
 
    ptr = &mas[2];
    ptr++; // сдвигаем указатель на одну позицию вправо получается что ptr теперь указывает на mas[3]
    ptr++; // сдвигаем указатель ещё на одну позицию вправо получается что ptr теперь указывает на mas[4]
    for(int i = 0; i < size; ++i) // заводим цикл чтобы каждый раз не писать ptr-- и выводим элементы массива задом наперёд
    {
        std::cout << *ptr << ' ';
        ptr--;
    }
}
С таким же успехом можно ставить указатель и на другие элементы массива. Указатель указывает на что то и это что то может быть чем угодно отсюда такое слово "указатель"
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2017, 21:08
Помогаю со студенческими работами здесь

Заполнить массив из 12 элементов случайными числами от -20 до 10
заполнить массив из 12 элементов случайными числами от -20 до 10. Вывести индексы отрицательных...

Заполнить массив из 10 элементов целыми случайными числами от -5 до 5,
У меня тут вот такая задачка, помогите решить, пожалуйста) Заполнить массив из 10 элементов целыми...

Заполнить одномерный массив из 5 элементов случайными числами
Помогите пожалуйста, вообще не знаю как это сделать: Заполнить одномерный массив из 5 элементов...

Заполнить массив из 1000 элементов случайными числами
Заполнить массив из 1000 элементов случайными числами. Найти мат ожидание и дисперсию


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru