Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 2
Регистрация: 21.03.2010
Сообщений: 38
1

Индексация двухмерного массива char

26.03.2010, 23:49. Показов 1960. Ответов 4
Метки нет (Все метки)

Подскажите пожалуйста, как правильно передать в функцию указатель на двухмерный массив char и как его индексировать?
Спасибо.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2010, 23:49
Ответы с готовыми решениями:

Заполнение двухмерного массива типа char символами цифр
Приветствую всех! Разбираю одну задачу, в которой двухмерный символьный массив заполняется...

В чем отличие двумерного массива типа char от массива указателей на char?
В чем отличие двумерного массива типа char и массива указателей на char ?

array char* to char* (значения массива указателей в один указатель)
Как сложить(или вывести в формате char*) все значения массива указателей(char *) воедино, то есть...

Поворот массива на 90 градусов (cannot convert form char to char*)
Пытаюсь повернуть массив на 90 градусов. Понимаю что проблема в преобразовании данных, но не знаю...

4
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11031 / 6983 / 1651
Регистрация: 25.07.2009
Сообщений: 12,727
27.03.2010, 00:37 2
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>
#include <stdlib.h>
#include <string.h>
 
#define ROWS 5
#define MAX_STR 256
 
void printRows(char **arr, size_t rows){
    size_t i;
    for ( i = 0; i < rows; ++i )
        printf("%s\n", arr[i]);
}
 
int main(void){
    char buf[MAX_STR], *p, **arr;
    int i;
    
    if ( ( arr = (char**)malloc(sizeof(char*) * ROWS) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    printf("Enter %d strings:\n", ROWS);
    for( i = 0; i < ROWS; ++i ){
        if ( !fgets(buf, MAX_STR, stdin) ){
            fprintf(stderr, "Can't get row");
            exit(1);
        }
        if ( p = strrchr(buf, '\n') )
            *p = '\0';
        if ( !*buf ){
            fprintf(stderr, "Empty rows not allowed!\n");
            exit(1);
        }
        if ( ( arr[i] = strdup(buf) ) == NULL ){
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
    }
    printf("You have entered:\n");
    printRows(arr, ROWS);
    
    for ( i = 0; i < ROWS; ++i )
        free(arr[i]);
    free(arr);
    
    exit(0);
}
1
Day
1173 / 983 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
27.03.2010, 00:47 3
Хороший вопрос.
Есть 2 подхода.
1. (школярский)
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#define N 20
#define M 35
fm(int A[N][M]....)
{
   for(i=0;i<n;i++)
     for(j=0; j<M j++) 
        if (A[i][j]==0) Oh!
}
main()
{
  int B[N][M];
  fm(B);
}
2й -изощренный
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int **CreateM(int n, int m)
{  int **a;
     a = (int **)malloc(n * sizeof(int *));
     for(i=0; i<n; i++)
       a[i] = (int *) malloc(m*sizeof(int));
     return a;
}
fm(int **x, n, m)
{
   for(i=0;i<n;i++)   // абсолютно тоже самое! 
     for(j=0; j<M j++) 
        if (A[i][j]==0) Oh!
}
main()
{
  int **B;
  B = CreateM(n, m);
  fm(B, n, m);
}
2-й подход значительно гибче. Размерность массива ты можешь определить по ходу счета,
часто она зависит от исходных данных
Кроме того, при некоторой модификации он дает возможность делать строки разной длины.
1
1 / 1 / 2
Регистрация: 21.03.2010
Сообщений: 38
27.03.2010, 08:54  [ТС] 4
Спасибо большое. Я всё пытался с одним указателем. Не думал, что тут нужен указатель на указатель.
0
Day
1173 / 983 / 83
Регистрация: 29.10.2009
Сообщений: 1,386
27.03.2010, 14:01 5
ivpoed, вообще-то можно и с одним указателем. Делаем сами некоторую работу за транслятор,
код чуть менее понятный, но покороче
C
1
2
int A[N*M];
 A[i*M+j] = ... // это то же, что и A[i][j] в предыдущих вариантах
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2010, 14:01

Приведение массива char[] (или char* ) в LPCTSTR
Задача: пользователь вводит директорию, нужно проверить существует ли эта директория. Функция...

Передача двухмерного массива в функцию и изменение элемента массива
Такая проблема! Нужно передать в функцию двухмерный массив и изменить на елемент который равен 0 и...

Запись в *char элемента из массива *char[i]
Есть динамический массив, например char *drives = {&quot;A:&quot;, &quot;B:&quot;, &quot;C:&quot;, &quot;D:&quot;, &quot;E:&quot;, &quot;F:&quot;,...

Индексация массива
Изучаю c++, на просторах наткнулся на задачку без пояснений: int a = { 1,2,3,4 }; cout &lt;&lt; 3; // ?...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.