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);
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);
Les autres réponses ne sont pas tout à fait correct. Il est plus comme:
*(*(a+i)+j)
merci beaucoup, il m'a aidé, mais son * (* (a + i) + j) – Shweta
@Shweta: réponse éditée en conséquence –
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).
// 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 ....
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`
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
Oui, c'est pourquoi j'ai écrit "une simplification supplémentaire pour le 2ème rang". Merci de l'avoir clarifié. – pmg
Il a clarifié mes concepts. Donc, merci pour l'aide – Shweta
Appliquer la règle récursive:
a[i][j] == *(a[i] + j) == *(*(a + i) + j)
pas, au moins parce que [0] [1] et [1] [0] citerais la même mémoire dans ce cas – Vladimir
S'il vous plaît marquer la meilleure réponse –