2015-02-05 2 views
0

У меня есть массив char s, и он инициализируется с помощью вложенного цикла for.2d char array и char pointer

Как получить доступ к каждому элементу массива, например a[i][j], с помощью указателя char?

Я пробовал * (* (p+i)+j), что дает мне унальную ошибку. Я также попытался следующие:

char a[maxr][maxc]; 
char *p = 0; 
p = &a[0][0]; 
int i,j; 
for (i = 0; i < r-1; i++){ 
    for (j = 0; j < c-2; j++){ 
     while (*p != '\0'){ 
       *p = 'Y'; 
       p++; 
     } 
    } 
} 

Если я сделать:

char a[maxr][maxc]; 
    char *p = 0; 
    p = &a[0][0]; 
    int i,j; 
    for (i = 0; i < r-1; i++){ 
      p = p+i; 
     for (j = 0; j < c-2; j++){ 
      p = p+j; 
      while (*p != '\0'){ 
        *p = 'Y'; 
        p++; 
      } 
     } 
    } 

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

+0

Не зная тип 'a' это невозможно ответить точно. Массив массивов против массива указателей будет иметь разные ответы. Обновите вопрос, чтобы включить объявление 'a', пожалуйста. – WhozCraig

+0

Возможный дубликат [Указание на массив] (http://stackoverflow.com/questions/7613584/pointing-at-array) –

+0

@WhozCraig 'a' есть ... Уценка не удалась, но я ее исправил. – unwind

ответ

1

Предполагая, что a определяется как char *a[m] (m > i)

Чтобы получить значение a[i][j], вы должны использовать что-то вроде,

char ** p = a; 

и

*(*(p + i) + j) 

при условии, i и j a являются действительными.

0

с г тотально строки, попробовать это:

*(p+i*r +j)