2010-09-27 7 views
2

adresses des tableaux 1d sont effectivement pris commereprésentation du tableau 2d par pointeur

a[i]=*(a+i); 

sont les adresses de tableaux 2d calculées comme

a[i][j]=**(a+i+j); 
+1

pas, au moins parce que [0] [1] et [1] [0] citerais la même mémoire dans ce cas – Vladimir

+0

S'il vous plaît marquer la meilleure réponse –

Répondre

4

Les autres réponses ne sont pas tout à fait correct. Il est plus comme:

*(*(a+i)+j) 
+0

merci beaucoup, il m'a aidé, mais son * (* (a + i) + j) – Shweta

+0

@Shweta: réponse éditée en conséquence –

0

Non, parce qu'alors a[1][2] et a[2][1] serait en même endroit. Quelque chose comme *(a+i*n+j) pour un tableau n-by-m est plus proche de la marque (mais attention, je tape l'expression exacte dans un éditeur de démarques, pas un test unitaire).

0
// CTest.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 

void print (int i, int j) 
{ 
    int a[3][3] = { 
     { 1,2,3 }, 
     { 4,5,6 }, 
     { 7,8,9 } 
     }; 
    printf ("%d\n", *(*(a+i)+j)); 
    printf ("%d\n", a[i][j]); 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    print (0,0); 
    print (1,1); 
    print (2,2); 
    return 0; 
} 

Retours:

* Cela a été un compilateur courir à travers ....

+0

Je suis désolé mais cela ne fonctionne pas – Shweta

+0

Ceci est supposé fonctionner. Qu'est-ce qui ne fonctionne pas exactement? – codymanix

+0

@codymanix: Il n'y a pas de double déréférencement, donc le type de tout ce qui est pointer-à-int. –

0

n ° a et a[i] sont de différents types (respectivement int** et int*).

Supposant que dans votre exemple a a été défini comme un tableau de tableau de int (par exemple a[10][20]), lorsque vous passez à une fonction (convertissant ainsi à pointer to the first element of the array) vous avez (avec « simplifications » plus pour le 2e rang de tableau)

 
    a   is of type `int**` 
    a[i]  is of type `int*` 
    a[i][j]  is of type `int` 

    *(a+i)  is of type `int*` 
    a+i+j  is of type `int**` 
    *(a+i+j) is of type `int*` 
    *(*(a+i)+j) is of type `int` 
+0

Si 'a' est en effet un" tableau 2d " (par lequel nous entendons normalement un tableau de tableaux) puis il se désintègre pour taper int (*) [n] '. – caf

+0

Oui, c'est pourquoi j'ai écrit "une simplification supplémentaire pour le 2ème rang". Merci de l'avoir clarifié. – pmg

+0

Il a clarifié mes concepts. Donc, merci pour l'aide – Shweta

2

Appliquer la règle récursive:

a[i][j] == *(a[i] + j) == *(*(a + i) + j)