Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 256
1

Массив и указатели

24.05.2024, 12:56. Показов 478. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.

Кажется, я не понял тему указателей и массивов. Хотя после ранее поднятой темы(Объявление массивов), я понял, но нет.

Имеем:
1. Массив указателей.

Задача:
1. Изменить все значения массива "array", используя сторонний указатель.

Что делал:
1. Как я понял как объявлять вассивы и что это такое:
1.1. Когда мы объявляем таким способом:
Код
int* array = new int [10];
Это значит, что мы объявили один указатель, указывающий на 1й элемент массива из 10 выделенных в памяти. При этом они расположены друг за другом и можно перемещаться по ним сторонним указателем такого же типа используя декремент\инкремент. Сами значения случайные.
Код
int* array = new int [10];

int* array [0] --------> 3121
           [1] --------> 978
           [2] --------> 123322
           ...
           [9] --------> 75675
1.2. Когда таким способом:
Код
int* m_array [10];
Объявляется 10 указателей. (точно не знаю, но предполагаю что одни компиляторы могут "обнуленные" указатели объявлять, другие нет).
Код
int* m_array [10];

int* m_array = 0;
int* array = 0;
int* array = 0;
...
int* array = 0;
3. Ну и мой код ниже.

Что не так:
1. Если проверять(смотреть), используя сторонний указатель, то, вроде как, я вижу то, что ожидаю: число равно индексу цикла.
2. Если проверять(смотреть), используя "array [i]", то выводится ерунда. Есть подозрение, что я неправильно понимаю как пользоваться "[]".

Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int main() {
    int length = 10;
    int* array [length];
 
    int* pointer1 = array [0]; // Указатель для "хождения" по указателям в цикле.
    for (int i = 0; i < length; ++i) {
        pointer1 = new int (i); // Присваиваем значение равное значению индекса цикла.
        // Смотрим, изменилось ли значение.
        std::cout << "*array [" << i << "] = " << *array [i] << std::endl;
        // Смотрим через временный указатель.
        std::cout << "*pointer1 = " << *pointer1 << std::endl;
        ++pointer1;
    } // for.
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.05.2024, 12:56
Ответы с готовыми решениями:

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов?
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;//...

Отсортировать массив и вывести на экран (массивы и указатели на указатели)
Даны массивы F-фамилий студентов и S-результаты сессии (5 оценок) , причем s- результат сессии F...

Как в массив скопировать массив, который заполнен через указатели
Есть два файла допусти. Суть вопроса в том, что находится во втором файле. Как записать? car.h ...

Создать массив указателей на одномерный массив и через указатели присвоить массиву значения
Не могу понять как работают указатели. Объявляю массив, делаю на него указатель. Циклом с...

Массив и указатели. Вывести на экран весь массив и на отдельной строке - значение минимального элемента массива
Нужна помощь, не знаю как сделать это задание. Написать программу, которая создает массив из 10...

4
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
24.05.2024, 13:08 2
Лучший ответ Сообщение было отмечено Palich как решение

Решение

Цитата Сообщение от Palich Посмотреть сообщение
int* pointer1 = array [0]; // Указатель для "хождения" по указателям в цикле.
Неверно.
Здесь нужен указатель на указатель (т.к. элементы массива - указатели)
C++
1
 int** pointer1 = &array[0]
Цитата Сообщение от Palich Посмотреть сообщение
pointer1 = new int (i)
соответственно
C++
1
*pointer1 = new int (i);
Добавлено через 1 минуту
Цитата Сообщение от Palich Посмотреть сообщение
Смотрим, изменилось ли значение.
Не изменилось, потому что запись была "мимо".
1
 Аватар для ram876
758 / 455 / 213
Регистрация: 19.12.2016
Сообщений: 1,815
24.05.2024, 13:19 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
int main()
{
    int size = 10;
    int* array = new int[size];//Объявили массив в куче
    int* iterator = array;//объявили указатель и присвоили ей начало массива array
    int num;
    int* ptr = &num;
    for(auto i = 0; i < size; i++)
    {
        array[i] = i;//присваиваем значение i-тому элементу массива
        std::cout << "element by array name = " << array[i] << "\n";//выводим значение i-того элемента массива
        *ptr = i;// Присваиваем значение равное значению индекса цикла
        std::cout << "element by array[*ptr] = " << array[*ptr] << "\n";//выводим значение, используя значение,
                                                                        //на которое указывает ptr
        std::cout << "element by array+*ptr = " << *(array+*ptr) << "\n";//выводим значение,смещая указатель на значение,
                                                                        //на которое указывает ptr
        *iterator = i*size;//присваиваем значение элементу массива, на который указывает iterator
        std::cout << "element by iterator = " << *iterator << "\n";//выводим значение через итератор
        
    }
}
0
2 / 2 / 0
Регистрация: 07.04.2016
Сообщений: 256
24.05.2024, 13:54  [ТС] 4
Цитата Сообщение от ram876 Посмотреть сообщение
int* array = new int[size];//Объявили массив в куче
я не уточнил в первом сообщении, но имелось в виду то, что мы имеем именно такой массив:
Код
int* array [10];
как в 5й строчке моего кода.

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Здесь нужен указатель на указатель (т.к. элементы массива - указатели)
и ведь действительно... сам же я расписал, что этот массив из указателей... не увидел, как обычно: "смотрю в код, вижу фигу" )
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12812 / 6684 / 1800
Регистрация: 18.10.2014
Сообщений: 16,935
24.05.2024, 19:42 5
Цитата Сообщение от Palich Посмотреть сообщение
1. Как я понял как объявлять вассивы и что это такое:
Массивы можно объявлять только одним способом: TYPE name[SIZE]. Все.

Цитата Сообщение от Palich Посмотреть сообщение
1.1. Когда мы объявляем таким способом:
C++
1
int* array = new int [10];
Это не объявление массива вообще.

Цитата Сообщение от Palich Посмотреть сообщение
Это значит, что мы объявили один указатель, указывающий на 1й элемент массива из 10 выделенных в памяти.
Верно. Это объявление именно указателя, а не массива.

Цитата Сообщение от Palich Посмотреть сообщение
Когда таким способом:
C++
1
int* m_array [10];
А вот это уже объявление массива. Правда, что у вас дальше происходит в этом пункте - не ясно.

Цитата Сообщение от Palich Посмотреть сообщение
int* pointer1 = array [0]; // Указатель для "хождения" по указателям в цикле.
Для того, чтобы "ходить" по массиву array, нужно получить указатель на элемент массива array. Его можно получить как просто array или как array + i или как &array[0] или как &array[i] и т.п. Ваше array [0] не подпадает ни под один из этих вариантов, то есть это НЕ получение указателя на элемент массива array.
0
24.05.2024, 19:42
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2024, 19:42
Помогаю со студенческими работами здесь

Задача на массив и указатели.(массив из случайных чисел)
Найти абсолютное значение,которое чаще остальных встречается в массиве. #include&lt;stdio.h&gt;...

Организовать введение данных в массив , обработку элементов и выведение результатов используя указатели. Дано натуральное число N и одномерный массив
Организовать введение данных в массив , обработку элементов и выведение результатов используя...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....

Массив и указатели
Доброго времени суток. Задача состоит в том, что бы отсортировать массив по возрастанию, но без...

Массив и указатели
#include &lt;iostream&gt; using namespace std; int main() { int *i, t; i = t; cout...

Указатели и массив
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; int main(int...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
Информационное моделирование
hw_wired 28.01.2025
Введение в информационное моделирование В современном мире информационное моделирование стало неотъемлемой частью научной, образовательной и профессиональной деятельности. Это мощный инструмент. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru