j'ai réalisé que j'avais une certaine confusion quant à la valeur d'un pointeur déréférencé, comme je lisais un texte de C avec l'extrait de code suivant:Quelle est la valeur d'un pointeur déréférencé
int main()
{
int matrix[3][10]; // line 3: matrix is tentatively defined
int (* arrPtr)[10] = matrix; // line 4: arrPtr is defined and initialize
(*arrPtr)[0] = 5; // line 5: what is the value of (*arrPtr) ?
Ma confusion est en ce qui concerne la valeur de * arrPtr dans la dernière ligne. C'est ma compréhension jusqu'à ce point.
Ligne 3, la matrice est le déclin (provisoirement défini) pour être un tableau de 3 éléments de type tableau de 10 éléments de type int.
Ligne 4, arrPtr est défini comme un pointeur vers un tableau de 10 éléments de type int. Il est également initialisé comme un ptr à un tableau de 10 éléments (c'est-à-dire la première rangée de matrice)
Maintenant Line 5, arrPtr est déréférencé, ce qui donne le tableau actuel, donc son type est un tableau de 10 ints.
Ma question: Pourquoi la valeur de la matrice, juste l'adresse de la matrice et pas en quelque sorte liée à ses éléments?
Dans l'expression (* arrPtr) [0] = 5, étant donné que l'opérateur d'indice [] requiert un pointeur comme opérande. Est-ce que * arrPtr satisfait cette exigence? –
'* arrPtr' est un tableau (arrPtr pointe sur un tableau et vous le déréférenciez), et vous pouvez utiliser un indice sur les tableaux. C appelle '[]' sous-indexation de tableau et ne nécessite qu'un seul opérande pour être un pointeur --- cependant, il repose sur les tableaux dégradants, voir 6.5.2.1/2 dans le standard C (qui le dit explicitement): http://www.open-std.org/jtc1/sc22/wg14/www/standards.html –
En fait, l'exemple de 6.5.2.1/4 devrait également aider. –