Est-ce que j'ai le droit de créer un pointeur char de cette manière ?
Code:char *nom[15];
ou est-ce que je dois absolument éviter de mettre les crochets et le 15 comme si c'était une variable tableau classique ?
Version imprimable
Est-ce que j'ai le droit de créer un pointeur char de cette manière ?
Code:char *nom[15];
ou est-ce que je dois absolument éviter de mettre les crochets et le 15 comme si c'était une variable tableau classique ?
Bonsoir,
Cela dépend de ce que tu entends faire avec cette ligne :P
char *nom[15]; déclare un tableau de 15 pointeurs. Chaque nom[i] est un char*.
Si c'est un pointeur sur un tableau de char tab[15] que tu veux faire, il te faut rajouter des parenthèses : char (*nom)[15];.
Mais un pointeur de type char n'est-il pas également un tableau par définition ? Par exemple dans char *mot je peux insérer une chaîne de caractère comme si c'était un tableau comme ceci char mot[15].
Par définition : non. Ce n'est rien de plus que l'adresse d'un char.
Exemple :
p pointe vers l'adresse du seul caractère 'a', aucune notion de tableau ici.Code:
1
2 char c = 'a'; char *p = &c;
Mais potentiellement oui, dès lors que cette adresse est celle d'un tableau
- alloué : char *mot = malloc(15);
- statique :
Code:
1
2 char tab[15]; char *mot = tab;
Mais attention dans ces deux derniers points, on parle de tableau de char, alors que
- char *noms[15]; (devrait-on l'écrire avec un « s » à la fin puisqu'il s'agit de 15 fois un pointeur char *nom; ;)) est un tableau de char* ;
- char (*nom)[15]; est un pointeur vers un tableau de 15 char.
Un exemple pour appréhender un peu les divers éléments :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include <stdio.h> void pointeur_tableau(char (*phello)[15]) { printf("pointeur_tableau : %s\n", (*phello)); // On déférence le pointeur pour accéder au tableau printf("6e char du tableau : %c\n", (*phello)[6]); // 6e caractère du tableau (parenthèses essentielles, sinon // on tente d'accéder au premier caractère du 6e tableau ! de // 15 char à partir de l'adresse de « hello » passée } int main(void) { char hello[15] = "Hello World"; // Tableau contenant la chaine "Hello World" char *p = hello + 3; // Pointe vers l'adresse de la troisième lettre 'l' char *tab[2] = { hello, // Le premier élément pointe vers l'adresse de la première lettre 'H' hello + 6 // Le second élément pointe vers l'adresse de la sixième lettre 'W' }; pointeur_tableau(&hello); // remarque que je passe l'adresse de « hello » printf("p : %s\n", p); // lo World printf("tab[0] : %s\n", tab[0]); // Hello World printf("tab[1] : %s\n", tab[1]); // World return 0; }