Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2012, 15:50   #1
Tkas
 
Регистрация: 03.03.2012
Сообщений: 7
По умолчанию Почему перезаписывается первый элемент массива?

Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
/*В заданном одномерном массиве целого типа поменять местами следующие 2 элемента: первый и последний положительные.*/
void main()
{
    int a[3];
    int *i, *perv, *posl;
    perv = posl = a;
    for (i=a; i<a+3; i++)
    {
        scanf("%d", i);
        if (*i>0)         //находим последний положительный элемент массива
            *posl = *i;
    }
    for (i=a; i<a+3; i++) //находим первый положительный элемент массива
    {
        if (*i>0)
        {
            *perv = *i;
            break;
        }
    }
    printf("%d\n", *perv);
    printf("%d\n", *posl);
    getch();
}
Прогоняю в отладчике. a[0] в первом цикле становится равно последнему введенному значению. В итоге во втором цикле *perv будет равно последнему введенном значению. В чем ошибка?
Tkas вне форума Ответить с цитированием
Старый 03.03.2012, 16:02   #2
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
a[0] в первом цикле становится равно последнему введенному значению. В итоге во втором цикле *perv будет равно последнему введенном значению. В чем ошибка?
Вот в этом
Цитата:
Код:
perv = posl = a;
Вы сослали указатели на один и тот же адрес памяти
Поэтому когда тут вы присваиваете
Цитата:
Код:
*posl = *i;
Соответствеено a[0] станет равным занчению *posl
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 03.03.2012, 16:06   #3
Tkas
 
Регистрация: 03.03.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение

Вы сослали указатели на один и тот же адрес памяти
Поэтому когда тут вы присваиваете

Соответствеено a[0] станет равным занчению *posl
А как правильно проинициализировать указатели?
Tkas вне форума Ответить с цитированием
Старый 03.03.2012, 16:11   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
А как правильно проинициализировать указатели?
Ну как бе выделением памяти для них
Типо
Код:
posl = new int;
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 03.03.2012, 16:15   #5
Tkas
 
Регистрация: 03.03.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Ну как бе выделением памяти для них
Типо
Код:
posl = new int;
Код на C, поэтому так никак =)
Если сделать так, чтобы perv и posl больше не были указателями, то все будет работать правильно. А сделать так, чтобы программа верно работала с этими указателями нельзя?

Последний раз редактировалось Tkas; 03.03.2012 в 16:30.
Tkas вне форума Ответить с цитированием
Старый 03.03.2012, 16:50   #6
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Если сделать так, чтобы perv и posl больше не были указателями, то все будет работать правильно. А сделать так, чтобы программа верно работала с этими указателями нельзя?
Выделите память с помощью malloc
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 03.03.2012, 16:56   #7
Tkas
 
Регистрация: 03.03.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Выделите память с помощью malloc
Да вот только не проходили мы его еще
Tkas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти первый отрицательный элемент массива имеющий чётный номер (Delphi) Vanger Помощь студентам 5 25.01.2011 11:41
Записать первый элемент массива в конец Pecho Помощь студентам 3 24.11.2010 23:14
Заполнение массива. Первый элемент вводит пользователь, а дальше рассчитывает программа НаташенькаRu Помощь студентам 8 25.10.2010 21:03
первый нулевой элемент массива shelest Помощь студентам 2 15.11.2009 12:38