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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2008, 11:13   #1
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию Указатели в Си

Объясните пожалуйсто в чем ошибка: задача ввести двумерный массив с помощью указателей и вывести его на экран с помощью индексов

Код:
# include<stdio.h>
# include<iostream.h>

int main()

{
int **a;
int i,j;
int **b;

a=new int *[3];
for(i=0;i<3;i++)    
    a[i]=new int [3];

b=a;

for(i=0;i<3;i++)    
    b[i]=a[i];



for(i=0;i<3;i++)
{    

    for(j=0;j<3;j++)
    {
    cin>>**b;
    (*b)++;
    }
    b++;
}


for(i=0;i<3;i++)    
{
for(j=0;j<3;j++)
    cout<<a[i][j]<<" ";
cout<<"\n";
    }
    
    
    }

Последний раз редактировалось Иллидан; 15.02.2008 в 19:48.
Иллидан вне форума Ответить с цитированием
Старый 17.02.2008, 13:37   #2
Sota
Let's keep talking
Форумчанин Подтвердите свой е-майл
 
Аватар для Sota
 
Регистрация: 02.07.2007
Сообщений: 217
По умолчанию

Посмотри внимательно:
Код:
#include <stdafx.h>
#include <stdio.h>   
#include <iostream>  
#include <conio.h>

using namespace std;
using namespace System;

int main(void) 
{  
int **a;  
int i,j;  
int **b;  

a=new int *[3];  
for(i=0;i<3;i++)      
    a[i]=new int [3];  
 
b=a;  
 
for(i=0;i<3;i++)      
    b[i]=a[i];  

for(i=0;i<3;i++) {      
	for(j=0;j<3;j++)  
		{  
		 cin>>**b;  
		 (*b)++;  
		  }   
    b++;   
}   
for(i=0;i<3;i++)       
{  
for(j=0;j<3;j++)  
    cout<<a[i][j]<<" ";  
	cout<<"\n";  
}   
_getch();
return 0;
}
Лучше С++, чем ++С...
Sota вне форума Ответить с цитированием
Старый 17.02.2008, 18:09   #3
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
Сообщение от Sota Посмотреть сообщение
Посмотри внимательно:
Что-то я не понял, а в чем фишка ?
Иллидан вне форума Ответить с цитированием
Старый 18.02.2008, 16:30   #4
Sota
Let's keep talking
Форумчанин Подтвердите свой е-майл
 
Аватар для Sota
 
Регистрация: 02.07.2007
Сообщений: 217
Сообщение

Да вообщето нивчём. Это я просто код изменил, а то программа вообще не компилировалась.
Если надо решение всей задачи, то можешь дать всё подробное условие?
Лучше С++, чем ++С...
Sota вне форума Ответить с цитированием
Старый 18.02.2008, 18:07   #5
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
Сообщение от Sota Посмотреть сообщение
Да вообщето нивчём. Это я просто код изменил, а то программа вообще не компилировалась.
Если надо решение всей задачи, то можешь дать всё подробное условие?
Эй это и есть подробное условие(что я в начале писал), а у меня твоя не компилируется. Она правильно работает?

Последний раз редактировалось Иллидан; 18.02.2008 в 18:09.
Иллидан вне форума Ответить с цитированием
Старый 18.02.2008, 22:32   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Я думаю вы слегка усложняете.
Вот так нельзя сделать разве:
Код:
# include<stdio.h>   
# include<iostream.h>   
  
int main()   
  
{  
int **a;  
int i,j;   
 
a=new int *[3];  
for(i=0;i<3;i++)      
    a[i]=new int [3];   
 
for(i=0;i<3;i++)  
    for(j=0;j<3;j++)    
         cin>>a[i][j];        
  
  
for(i=0;i<3;i++)
{       
    for(j=0;j<3;j++)
       { 
           cout<<a[i][j]<<" ";
       }  
       cout<<"\n";  
}   
       
       
}
Тут два варианта:
либо я не догнал всей СЛОЖНОСТИ задания,
либо вы слегка усложняете себе жизнь...
MaTBeu вне форума Ответить с цитированием
Старый 19.02.2008, 15:30   #7
Иллидан
Форумчанин
 
Регистрация: 16.01.2008
Сообщений: 288
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Я думаю вы слегка усложняете.
Вот так нельзя сделать разве:
Спасибо так конечно можно. Но мне нужно работать именно с указателями. То есть, ввести двумерный массив через указатели. И вроде по логике моя программа верна, а почему не правильно работает ума не приложу.
Иллидан вне форума Ответить с цитированием
Старый 20.02.2008, 11:14   #8
n@sok
Пользователь
 
Регистрация: 24.11.2007
Сообщений: 46
По умолчанию

Код:
for(i=0;i<3;i++)  
{      
 
    for(j=0;j<3;j++)  
    {  
    cin>>**b;  
    (*b)++;  
    }   
    b++;   
}
В этом цикле при выполнении оператора (*b)++ изменяются значения в массиве указателей на который указывает a (b=a). Поэтому после этого выражение a[i][j] становится не действительным.
n@sok вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели JOFRIF Общие вопросы C/C++ 2 31.08.2008 18:34
Указатели Принц Общие вопросы C/C++ 2 08.06.2008 16:15
Указатели в функции. _LEON_ Общие вопросы C/C++ 4 04.02.2008 10:38
Указатели Си JET_FLASH Общие вопросы C/C++ 2 31.01.2008 23:02
Задачи на массивы и указатели в СИ D@rk_Spirit Общие вопросы C/C++ 3 29.12.2007 08:01