Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/64: Рейтинг темы: голосов - 64, средняя оценка - 4.97
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 347
1

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

23.11.2014, 15:32. Показов 11688. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Хочу разобраться,как обращаться к элементам двумерного массива через указатели. Вот у меня есть код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
include <stdio.h>
#include <stdlib.h>
#define n 2
#define m 3
 
int main()
{
    int a[n][m],i,j,**pi=&a;
 
    for(i=0;i<n;i++)     /*Считывание элементов */
        for(j=0;j<m;j++)
        scanf("%d",(pi+i)+j);
 
    for(i=0;i<n;i++){        /*Вывод элементов на экран */
        for(j=0;j<m;j++)
        printf("%d",*(pi+i)+j);
        printf("\n");
    }
 
    return 0;
}
На выходе результат почему-то не совсем такой,как хотелось бы.Помогите разобраться с вопросом считывания и вывода значений на экран.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2014, 15:32
Ответы с готовыми решениями:

Обращение к элементам двумерного массива через указатели
Собсно, гуглил, вроде всё просто, но что-то плохо воспринимается. Имеется 2d массив. data1 = ...

Обращение к элементам динамического массива через указатели
Само задание написано внизу в коментарии! Заранее спасибо! #include &lt;conio.h&gt; #include...

Доступ к элементам массива через указатели
Пишу программу для сортировки массива указателей // сортировка объектов через массив указателей...

Обращение к элементам двухмерного массива через указатель
Здравствуйте! Имеется класс class Analyzer { public: vector&lt; vector&lt;string&gt; &gt;...

4
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.11.2014, 16:00 2
int ** и int[][]/int*[] - разные вещи..
C
1
int (*pi)[m]=a;
C
1
scanf("%d",*(pi+i)+j);
C
1
printf("%d",*(*(pi+i)+j));
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
23.11.2014, 16:02 3
Генрисон,
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
 
#define N 2
#define M 3
 
int main(void) {
    int a[N][M] = {
        {0, 1, 2},
        {3, 4, 5}
    };
    
    // можно так
    int* p = &a[0][0];
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("%d ", *(p + i*M + j));
        }
        printf("\n");
    }
    
    // или так
    int (*pa)[M] = a;
    for (int i = 0; i < N; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("%d ", *( *(pa+i) + j));
        }
        printf("\n");
    }
    
    // еще, например, так
    for (int* i = p; i <= &a[N-1][M-1]; ++i) {
        printf("%d ", *i);
        if ( (i-p) % M == M-1 ) {
            printf("\n");
        }
    }
    
    // или вот так
    for (int (*i)[M] = pa; i < &a[N]; ++i) {
        for (int j = 0; j < M; ++j) {
            printf("%d ", *(*i+j));
        }
        printf("\n");
    }
    
    return 0;
}
1
4 / 3 / 1
Регистрация: 30.10.2012
Сообщений: 347
23.11.2014, 17:30  [ТС] 4
Jewbacabra, подскажите,а как мне сделать обращение к элементу в случае,если я хочу,например,сделать так: если второй элемент в первом столбце больше 5,то присвоить ему значение 2 ? Я понимаю,что в форме обращения [] это будет выглядеть вот так:
C
1
2
if(a[1][0] > 5)
a[1][0]=2;
а как это сделать с указателями понимаю плохо.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
23.11.2014, 17:44 5
C
1
2
if(*(*(a + 1)) > 5)
    **(a + 1) = 2;
Добавлено через 4 минуты
Да, скобки можно не ставить, я что-то переборщил.
C
1
2
if(**(a + 1) > 5)
    **(a + 1) = 2;
1
23.11.2014, 17:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2014, 17:44
Помогаю со студенческими работами здесь

Найти минимальный элемент массива (через указатели, запрещено обращаться к элементам массива по индексам)
Написать программу, создающую массив из 10 случайных целых чисел из отрезка . Вывести на...

Обращение к элементам массива через биты некоторого числа
Пусть есть массив Mass из 10 элементов и число А = 510 = 0...0 01012. Мне надо обратиться к 0 и 2...

Обращение к элементам линейного списка через элементы массива указателей
Вот полная версия программы. Компилятор не выдаёт ошибок, но при выполнении, судя по всему, на...

Обращение к элементам класса через []
Пишу класс для работы с комплексными числами, почти все готово, осталось только 1 задание.


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru