Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
#1

Запись данных в динамический массив через указатели - C++

23.10.2013, 00:58. Просмотров 487. Ответов 8
Метки нет (Все метки)

Здравствуйте!
У меня возникла проблема... Когда я ввожу, например, 10 чисел в дин. массив, цикл while(через который я и хочу организовать ввод в массив) не выходит до тех пор, пока программа не дойдёт до 14-го элемента.
Т.е. вот, мне нужно ввести 10 элементов, однако программа продолжает вводить 11, 12, 13, 14 элементы.
Вот код программы:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <stdio.h>
 
int* mas;
int* pointer;
 
int _tmain(int argc, _TCHAR* argv[])
{
    mas=new int[10];
    pointer=&*mas;
 
    while (*pointer)//До тех пор, пока pointer указывает на массив
    {
        *pointer=5;
        pointer++;//Переходим к след. элементу
    }
 
    pointer=&mas[0];
    while (*pointer) printf("%d\n", *pointer++);//Пытаемся вывести на экран. Как бы, выводит всё нормально в данном случае, но, выводится 14 элементов, вместо 10, под которые и было выделено место(new int[10])...
    _gettch();
    return 0;
}

Подскажите пожалуйста, где ошибка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 00:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись данных в динамический массив через указатели (C++):

Запись данных в динамический массив - C++
Цель программы: принимать от пользователя ,не ограниченное количество раз, числа типа float и записывать их в динамический массив. Так ,...

Динамический массив и указатели!? - C++
Объясните пожалуйста как можно передать двумерный динамический массив с одной функции в другую с помощью указателей? И вот эта программа...

Указатели, динамический массив, пользовательская функция - C++
Создать функцию для поиска максимального отрицательного значения в массиве. Вернуть указатель и число отрицательных элементов. Создать два...

Запись, чтение объектов в файл через указатели. - C++
не могу прочитать объекты из файла. Сломал голову. Все перепробовал. Препод отправил гуглить))). Писать что то вроде пишет? Но что? А...

Как в массив скопировать массив, который заполнен через указатели - C++
Есть два файла допусти. Суть вопроса в том, что находится во втором файле. Как записать? car.h struct car { float massiv; ...

Запись значения в динамический массив - C++
Добрый вечер, Сел я на ночь глядя писать программу, но вот проблема int s=0,k=0,z=0; char *temp = new char; char *tempnum = new...

8
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 01:06 #2
C++
1
while (*pointer)//До тех пор, пока pointer указывает на массив
Почему вы думаете, что за границей массива сразу 0 будет?
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
23.10.2013, 01:09 #3
С чего Вы взяли, что указатель pointer после окончания массива станет нулевым?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 01:12 #4
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
25
#include <stdio.h>
#include <conio.h>
 
int* mas;
int* pointer;
 
int main()
{
    int N = 10;
    mas = new int[N];
    
    pointer = mas;
    for (int i = 0; i < N; ++i)
    {
        *pointer = 5;
        ++pointer; //Переходим к след. элементу
    }
 
    pointer = &mas[0];
    for (int i = 0; i < N; ++i)
        printf("%d\n", *pointer++);
    
    getch();
    return 0;
}
1
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
23.10.2013, 01:14  [ТС] #5
alsav22, конечно спасибо, но я бы всё таки хотелось бы узнать, как бы можно было бы это всё сделать именно через while, т.к. если бы я это делал через for-у меня проблем бы не было...
Просто, опять же, for он указывает от и до, а мне нужно так, что бы был указатель сначала на 0-й элемент массива, и цикл выходил тогда, когда ссылки на след. элемент уже не было(т.е. обращение, через while). По идеи-мы выделили 10 элементов под массив, значит, 10 адресов как бы должно быть, и макс. ссылка будет pointer+10. Но, почему то, используются ещё, непонятно от куда взявшиеся 4 элемента...
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 01:27 #6
Цитата Сообщение от Jack Wade Посмотреть сообщение
По идеи-мы выделили 10 элементов под массив, значит, 10 адресов как бы должно быть
Адреса в памяти идут непрерывно, и не важно сколько вы выделили. В С++, выход за границу массива, компилятор не отслеживает. Никакого признака окончания выделенной памяти не существует.

Добавлено через 2 минуты
Цитата Сообщение от Jack Wade Посмотреть сообщение
Но, почему то, используются ещё, непонятно от куда взявшиеся 4 элемента...
Может быть четыре, а может быть сорок четыре, пока в памяти не попадётся 0 (или пока программа не рухнет из-за того, что залезет куда не надо в поисках 0).
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
23.10.2013, 01:35 #7
Jack Wade, new [] просто выделяет непрерывный участок памяти и возвращает (типизированный) указатель на его начало; нет никакого "признака конца", '\0' в конце и пр.; что лежит за пределами этого блока тебя интересовать не должно.
1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 02:40 #8
Цитата Сообщение от Jack Wade Посмотреть сообщение
как бы можно было бы это всё сделать именно через while
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
25
#include <stdio.h>
 
int* mas;
int* begin;
int *end;
 
int main()
{
    int N = 10;
    mas = new int[N];
    begin = mas;
    end   = begin + N;
 
    while (begin != end)
    {
        *begin = 5;
        begin++;
    }
 
    begin = mas;
    while (begin != end) printf("%d\n", *begin++);
    
    getchar();
    return 0;
}
1
Jack Wade
63 / 36 / 6
Регистрация: 24.02.2013
Сообщений: 250
23.10.2013, 07:33  [ТС] #9
gray_fox, alsav22, понял! Большое спасибо за пояснение!
0
23.10.2013, 07:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 07:33
Привет! Вот еще темы с ответами:

Запись слова в динамический массив - C++
помогите пожалуйста, пользователь вводит слово, надо записать это слово по буквам в массив (1 буква, одна ячейка массива) , как определить...

Динамический массив, запись и удаление - C++
Помогите решить задачу нужно создать динамический массив записать в него работника, выйти в меню и записать опять нового, выйти в меню...

Двумерный динамический массив и запись в него - C++
Всем доброго времени суток.Проблема с записью в двумерный динамический массив Чтение производиться из файла с разделителями. Структура...

массив через указатели - C++
в общем проблемы начинаются с самого начала... нужен массив с Конкретными числами: -6.3, 0.8, 12, -4, 13, 2.5, 7, 8, -9, 10 в...


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

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

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