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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 21:46   #1
Tierprot
 
Регистрация: 19.11.2012
Сообщений: 3
По умолчанию Обработка массива функцией

Здравствуйте, такая вот проблема: хочу сделать функцию что бы в нее передавался указатель на массив, а затем уже внутри функции размер массива определелялся тем сколько в функцию поступит значений. Я написал код для такой функции, но никак не могу понять в чем ошибка (отправляемые значения в массив так и остаются внутри фунции и в мейн не попадают ( кроме первого)) - ошибка наверное дурацкая и типичная, но я в Си++ новичек:
Код:
#include <iostream>
#include <malloc.h>

using namespace std;

int read_array(int *X,int n){

	cout<<"enter your array of non-negative integers (to stop type '-1'):"<<endl;

	int i;

 while(1){
              cin>>i;
			   
              if(i>=0){
				    
                    X=(int *)realloc(X,n * sizeof(int));
					*(X+n-1)=i;
					n++; 					
			  }
			  
			  else break;
 }
 
 return n;

}



int main(){
 int *x;
  int n=1,i=0;
 
 x=(int *)malloc(sizeof(int));

 n=read_array(x,n);

 cout<<"Your array contain "<<n-1<<" elements:"<<endl;
 for(i=0;i<n-1;i++) cout<<*(x+i)<<" ";
 cout<<endl;


return 0;    
}

Последний раз редактировалось Stilet; 19.11.2012 в 22:21.
Tierprot вне форума Ответить с цитированием
Старый 20.11.2012, 00:45   #2
bedman
Пользователь
 
Регистрация: 24.07.2012
Сообщений: 28
По умолчанию

немного изменил, но смысл тот же
Код:
void read_array(int **X,int &n){
    n+=2;
    *X=(int *)realloc(*X,n*sizeof(int));
    (*X)[1]=1;
}

int main(){
    int *x;
    int n=1,i=0;

    x=(int *)malloc(sizeof(int));
    x[0]=0;
    read_array(&x,n);
    x[2]=2;
    cout<<"Your array contain "<<n<<" elements:"<<endl;
    for(i=0;i<n;i++) cout<<*(x+i)<<" ";
    cout<<endl;
    return 0;
}
bedman вне форума Ответить с цитированием
Старый 20.11.2012, 01:36   #3
Tierprot
 
Регистрация: 19.11.2012
Сообщений: 3
По умолчанию

А можно попросить пояснений, к тому что изменено, я не очень понял зачем потребовалось вводить двойной указатель, как появились операторы взятия ссылки и как все-таки заполняется массив.

Последний раз редактировалось Tierprot; 20.11.2012 в 01:46.
Tierprot вне форума Ответить с цитированием
Старый 20.11.2012, 16:47   #4
bedman
Пользователь
 
Регистрация: 24.07.2012
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Tierprot Посмотреть сообщение
зачем потребовалось вводить двойной указатель
тк передаем адрес указателя, потом его содержимое меняем
Цитата:
Сообщение от Tierprot Посмотреть сообщение
как появились операторы взятия ссылки
тогда функцию можно сделать void
Цитата:
Сообщение от Tierprot Посмотреть сообщение
как все-таки заполняется массив.
предлагаю вам это посмотреть в отладчике
bedman вне форума Ответить с цитированием
Старый 20.11.2012, 17:41   #5
Tierprot
 
Регистрация: 19.11.2012
Сообщений: 3
По умолчанию

Теперь все стало на свои места, спасибо за разъяснения!
Tierprot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Обработка массива Элизабет Помощь студентам 3 24.12.2011 00:57
обработка массива letnjaja Помощь студентам 0 23.10.2011 00:00
Обработка массива (си) Pascaler Помощь студентам 1 01.06.2011 11:28
Возвращение функцией массива GonZaleZ Общие вопросы C/C++ 7 21.09.2009 13:56