2017-02-24 4 views
0

EDIT2: J'ai essayé d'approximer mon code réel ici, mais apparemment j'ai manqué quelque chose, puisque ce code ne génère pas les avertissements que j'obtiens dans mon code actuel. Je ferme ça jusqu'à ce que je puisse comprendre l'écart.Point sur un tableau dans un tableau 2D en C

Original Question

Quelle est la syntaxe pour pointer vers un tableau (ligne) dans un tableau 2D tel que représenté ci-dessous? Comment puis-je accéder à des éléments individuels en utilisant le pointeur de ligne?

int arr[3][4] = 
{ 
    {0, 1, 2, 3}, 
    {4, 5, 6, 7}, 
    {8, 9, 10, 11}, 
}; 

EDIT:

Si je

int const * pRow = arr[1]; 

je reçois l'avertissement du compilateur

warning C4047: '=': 'const int *' differs in levels of indirection from 'const int (*)[4]' 

Y at-il une "bonne" façon de le faire, mais pas seulement le forcer avec des moules?

+2

ce qui est de la question avec 'arr [n]'? –

+1

@SouravGhosh, quel est le type de la variable qui indiquerait 'arr [n]'? –

+0

Que voulez-vous dire? C'est la même chose que 'arr [m]', dans le cas où le tableau a été défini comme 'arr [n] [m]' –

Répondre

2

arr[m] est un tableau de int, et comme tous les tableaux il se désintègre naturellement en un pointeur vers son premier élément. Maintenant, quel est le type du premier élément de arr[m] (c'est-à-dire arr[m][0])? C'est un droit int? Ainsi, arr[m] se désintègre en pointeur vers int, c'est-à-dire int*.

Cela signifie que vous pouvez faire quelque chose comme

int *ptr_to_arr_1 = arr[1]; 

Vous pouvez utiliser ptr_to_arr_1 que tout autre tableau ou pointeur. Donc, pour accéder au deuxième élément, vous avez ptr_to_arr_1[1], et c'est la même chose que arr[1][1].

+0

Veuillez voir ma question révisée. –

0

Vous pouvez utiliser cette int * ptr_to_row=arr[row_no];

+0

J'ai édité la question à ce sujet. –

+0

l'essayer sans const –

+0

en enlevant le const ajoute un nouvel avertissement, 'warning C4090: '=': différents qualificatifs 'const'. De plus, je devrais être capable d'avoir un pointeur vers les données const, même si les données ne sont pas const, cela signifie simplement que je ne peux pas le modifier via le pointeur. –