Initialisation «d’un pointeur sur un tableau d’entiers»

int (*a)[5]; 

Comment pouvons-nous initialiser un pointeur sur un tableau de 5 entiers montré ci-dessus.

L’expression ci-dessous est-elle correcte?

 int (*a)[3]={11,2,3,5,6}; 

Supposons que vous avez un tableau d’int de longueur 5 par exemple

 int x[5]; 

Ensuite, vous pouvez faire a = &x;

  int x[5] = {1}; int (*a)[5] = &x; 

Pour accéder aux éléments du tableau, vous devez: (*a)[i] (== (*(&x))[i] == (*&x)[i] == x[i] ) parenthèse nécessaire car la priorité de l’opérateur [] est plus élevé que * . (Une erreur courante peut être de faire *a[i] pour accéder aux éléments d’un tableau).

Comprenez ce que vous avez demandé en question est une erreur de compilation:

 int (*a)[3] = {11, 2, 3, 5, 6}; 

Ce n’est pas correct et il y a aussi une disparité de type, parce que {11,2,3,5,6} peut être assigné à int a[5]; et vous assignez à int (*a)[3] .

Aditionellement,

Vous pouvez faire quelque chose comme pour une dimension:

 int *why = (int p[2]) {1,2}; 

De même, pour les deux dimensions, essayez ceci (merci @ caf ):

 int (*a)[5] = (int p[][5]){ { 1, 2, 3, 4, 5 } , { 6, 7, 8, 9, 10 } }; 

{11,2,3,5,6} est une liste d’initialiseurs , ce n’est pas un tableau, vous ne pouvez donc pas la pointer. Un pointeur de tableau doit pointer sur un tableau comportant un emplacement mémoire valide. Si le tableau est une variable nommée ou juste un bloc de mémoire alloué, cela n’a pas d’importance.

Tout se résume au type de tableau dont vous avez besoin. Il existe différentes manières de déclarer des tableaux en C, en fonction de leur objective:

 // plain array, fixed size, can be allocated in any scope int array[5] = {11,2,3,5,6}; int (*a)[5] = &array; // compound literal, fixed size, can be allocated in any scope int (*b)[5] = &(int[5]){11,2,3,5,6}; // dynamically allocated array, variable size possible int (*c)[n] = malloc( sizeof(int[n]) ); // variable-length array, variable size int n = 5; int vla[n]; memcpy( vla, something, sizeof(int[n]) ); // always initialized in run-time int (*d)[n] = &vla; 
 int a1[5] = {1, 2, 3, 4, 5}; int (*a)[5] = &a1; 
 int vals[] = {1, 2}; int (*arr)[sizeof(vals)/sizeof(vals[0])] = &vals; 

et ensuite vous accédez au contenu du tableau comme dans:

 (*arr)[0] = ...