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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2014, 03:16   #1
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию Обращение к многомерному массиву.Язык Си.

Задание:Дана вещественная матрица А (8х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех столбцов, кроме последнего.
Моя программа:
Код:
#include <stdio.h>
#include <stdio.h>
int main(void)
{
int t,i, num[8][8], n=8;
int *p;
p=&num[8][8];
for(t=0; t<8; ++t)
for (i=0; i<8; ++i)
p[t][i] = (t*4)+i+1;
for (t=0; t<8; ++t)
{
for (i=0; i<8; ++i)
printf("%d  ",p[t][i]);
printf ("\n");
}
n = 8;
for (i = 0; i < n - 1; ++i)
for (t = 0; t < n - 1; ++t)
p[i][t] -= p[n - 1][i];
for (i = 0; i < n - 1; ++i)
p[n - 1][i] -= p[n - 1][n - 1];
for (t=0; t<8; ++t)
{
for (i=0; i<8; ++i)
printf("%d  ",p[t][i]);
printf ("\n");
}
return 0;
}
Нужно чтобы было обращение через операцию [] и указатель.Тут я обращаюсь через указатель - не работает, почему?
Ошибки:
prog.c: In function ‘main’:
prog.c:9:5: error: subscripted value is neither array nor pointer nor vector
p[t][i] = (t*4)+i+1;
^
prog.c:13:19: error: subscripted value is neither array nor pointer nor vector
printf("%d ",p[t][i]);
^
prog.c:19:5: error: subscripted value is neither array nor pointer nor vector
p[i][t] -= p[n - 1][i];
^
prog.c:19:20: error: subscripted value is neither array nor pointer nor vector
p[i][t] -= p[n - 1][i];
^
prog.c:21:9: error: subscripted value is neither array nor pointer nor vector
p[n - 1][i] -= p[n - 1][n - 1];
^
prog.c:21:24: error: subscripted value is neither array nor pointer nor vector
p[n - 1][i] -= p[n - 1][n - 1];
^
prog.c:25:19: error: subscripted value is neither array nor pointer nor vector
printf("%d ",p[t][i]);
East Undia Trading вне форума Ответить с цитированием
Старый 21.01.2014, 08:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

обращение к элементам двумерного массива через указатели

оно?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.01.2014, 08:46   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
оно?
Боюсь нет..
Там память динамическая.. А ТС хочет получить указатель на статический массив (хотя зачем? массив - это УЖЕ указатель)..
Могу предложить только вариант, где указатель на строку массива..
Код:
int a[n][m];
int (*p)[m] = a;
Чтобы получить 2-ую строку - p++;
Poma][a вне форума Ответить с цитированием
Старый 21.01.2014, 13:20   #4
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Poma][a, без разницы статический или динамический, главное чтобы в моей программе было обращение через указатель.
Цитата:
int a[n][m];
int (*p)[m] = a;

Чтобы получить 2-ую строку - p++;
Слишком сложно, я так не смогу.
Есть вариант чтобы указать на массив и пользоваться указателем как обычным двумерным массивом?

Почему вот так
Код:
int *ptr[8][8];
ptr=num;
нельзя?

Последний раз редактировалось Stilet; 21.01.2014 в 21:20.
East Undia Trading вне форума Ответить с цитированием
Старый 21.01.2014, 20:31   #5
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Почему вот так
Цитата:
Код:


int *ptr[8][8];
ptr=num;

нельзя?
Массив указателей..
Poma][a вне форума Ответить с цитированием
Старый 29.01.2014, 19:35   #6
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Poma][a, дак а как тогда то?
East Undia Trading вне форума Ответить с цитированием
Старый 29.01.2014, 20:51   #7
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

Если я так же сделаю, взлетит?Есть какой-нибудь универсальный способ чтобы двумерный массив работал через указатель как обычный двумерный массив?
Код:
#include<stdio.h>                 
#include<conio.h>                      
#include<stdlib.h>
#include<clocale>

int main ()
{ 
setlocale(LC_ALL, "Russian");
int i,j;
int mas[10][6];
int* masp[10];
int* Mas[6];
for (i=0;i<=9;i++) {
	*masp[i] = &mas[i];
}
for (i=0;i<=9;i++)
int *Mas=&masp[i];
for (j=0;j<=5;j++)
*(Mas+j)=rand()%200-100 ;
{ printf("\n");
for (j=0;j<=5;j++) 
	printf(" %d",*(Mas+j));
}
	for (j=0;j<=5;j++)
		{
			if (*(Mas+j)<0)
			*(Mas+j)=*-(Mas+j);
			else 
			*(Mas+j)=*(Mas+j);
		}
printf("\n \n \n \n");
{printf(" \n");
	for (j=0;j<=5;j++) 
		printf(" %d",*(Mas+j));}
getch();
}
East Undia Trading вне форума Ответить с цитированием
Старый 29.01.2014, 21:36   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Вот так :
Код:
#include <stdio.h>
#define size 1000

int main()
{
    int (*p)[size][size], a[size][size];
    p = &a;
    scanf("%d %d", p[0][1], p[0][2]);
    printf("%d %d", *p[0][1], *p[0][2]);
    return 0;
}
Забавно.. я начинаю любить Си..
Poma][a вне форума Ответить с цитированием
Старый 29.01.2014, 21:56   #9
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

А как же его не любить?
Что я все равно не то делаю.Либо это не то о чем я спрашивал.Ругается на строчки выделенные черным.
Код:
#include <stdio.h>
#define size 1000
int main(void)
{
int t,i, n=8, (*num)[size][size], a[size][size];
num=&a;
for(t=0; t<8; ++t)
for (i=0; i<8; ++i)
num[t][i] = (t*4)+i+1;
for (t=0; t<8; ++t)
{
for (i=0; i<8; ++i)
printf("%d  ",num[t][i]);
printf ("\n");
}
n = 8;
for (i = 0; i < n - 1; ++i)
for (t = 0; t < n - 1; ++t)
num[i][t] -= num[n - 1][i];
for (i = 0; i < n - 1; ++i)
num[n - 1][i] -= num[n - 1][n - 1];
for (t=0; t<8; ++t)
{
for (i=0; i<8; ++i)
printf("%d  ",num[t][i]);
printf ("\n");
}
return 0;
}
East Undia Trading вне форума Ответить с цитированием
Старый 29.01.2014, 21:57   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

замени тамошние num на *num..
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение как к функции или обращение после опрд действия Gefo JavaScript, Ajax 5 04.02.2013 08:55
Задачи по массиву tolik_t_t Помощь студентам 2 16.10.2010 18:47
Обращение к массиву по индексу Morgusha Помощь студентам 2 28.10.2009 15:03
распределение по массиву SuBwooFer JavaScript, Ajax 2 31.08.2009 10:48