OVH Cloud OVH Cloud

accès à un élément de *argv[]

28 réponses
Avatar
Thierry B
Bonjour,

Quand on d=E9clare une fonction main comme ceci:
int main (int argc, char *argv[])

*argv[], repr=E9sente un tableau dont chaque =E9l=E9ment est un pointeur
vers une chaine de caract=E8re.
Je ne comprends pas pourquoi alors on acc=E8de =E0 la valeur de chaque
=E9l=E9ment de ce tableau par argv[i] car si chaque =E9l=E9ment est un
pointeur, il faut utiliser une * pour avoir la vlaeur de ce pointeur
non?

Merci bcp.
A+

10 réponses

1 2 3
Avatar
Pierre Maurette
char *argv[] est équivallent (à un poil de grenouille près) à char **argv


Oui. Là, le tableau est parfait.

Gné ? Quel tableau ?

argv[]


Simplement, dans le cadre de ce fil, l'écriture en tableau de char*
(char* argv[]) me semble plus claire que l'écriture en pointeur double
(char** argv). Même si dans le cadre de paramètres de fonction, nous
savons tous que c'est la même chose, alors qu'ailleurs les confondre
est dangereux.
La première forme suggère l'utilisation, c'est le tableau des argc
paramètres, l'écriture est en quelque sorte autodocumentée. La seconde
décrit quant à elle la réalité du passage des paramètres.

Je regrette quelques points du langage C, mais ça ne changera rien. Il
n'est pas normal que tab et &tab soient la même chose (comme fonct et
&fonct). Je le regrette parce que partout ailleurs l'opérateur & fait
changer le type, donc que cette facilité introduit une incohérence. Il
est regrettable (à part pour l'activité des groupes de discussion) que
le passage d'un tableau en paramètre soit de façon silencieuse
différent de celui d'une structure.

Notons que nous en restons ici à un tableau de dimension 1. Réécrit, ça
donne:
typedef char* pChaine;
int main (int argc, pChaine argv[])
ou
int main (int argc, pChaine* argv)

Dans le cas de tableaux de dimension 2 et au-delà, ça se complique. On
ne devra plus confondre, à moins d'avoir de très bonnes raisons de la
faire, int** tab et int tab[][N], puisqu'un int(*)[N] n'est pas un
int**. En revanche, dans un int tab[M][N], le M ne sera généralement
qu'informatif. Enfin, tout ça ce n'est qu'au niveau des warnings.

C'était mon quart d'heure verbeux du dimanche matin ;-)

--
Pierre Maurette



Avatar
Emmanuel Delahaye


char *argv[] est équivallent (à un poil de grenouille près) à char
**argv



Oui. Là, le tableau est parfait.

Gné ? Quel tableau ?



argv[]


argv[] est un tableau ? Interessant. De quelle taille ?

Simplement, dans le cadre de ce fil, l'écriture en tableau de char*
(char* argv[]) me semble plus claire que l'écriture en pointeur double
(char** argv). Même si dans le cadre de paramètres de fonction, nous
savons tous que c'est la même chose, alors qu'ailleurs les confondre est
dangereux.


Ailleurs ça n'existe pas, à mois de définir un tableau initialisé.

La première forme suggère l'utilisation, c'est le tableau des argc
paramètres, l'écriture est en quelque sorte autodocumentée. La seconde
décrit quant à elle la réalité du passage des paramètres.

Je regrette quelques points du langage C, mais ça ne changera rien. Il
n'est pas normal que tab et &tab soient la même chose


Gné ? Pas du tout la même chose. Le premier est de type T* (pointeur sur
un objet du tableau), le second est de type (T*)[SIZE] (pointeur sur un
tableau d'une taille définie). Rien à voir.

T'es sûr que tu sais de quoi tu parles ? Il serait peut être le temps de
t'y mettre au lieu de nous abreuver de ta logorhée sans fin...

--
C is a sharp tool




Avatar
Pierre Maurette
[...]
argv[]


argv[] est un tableau ? Interessant. De quelle taille ?
C'est un tableau de type incomplet. Extrait de la norme:

"An array type of unknown size is an incomplete type"

Simplement, dans le cadre de ce fil, l'écriture en tableau de char* (char*
argv[]) me semble plus claire que l'écriture en pointeur double (char**
argv). Même si dans le cadre de paramètres de fonction, nous savons tous
que c'est la même chose, alors qu'ailleurs les confondre est dangereux.


Ailleurs ça n'existe pas, à mois de définir un tableau initialisé.
Ailleurs que dans les paramètres d'un fonction, il existe à la fois des

pointeurs et des tableaux, qu'il serait *très* dangereux de confondre.

[...]
Gné ? Pas du tout la même chose.
Certes. Pas exactement le même type. Mais de là à écrire "ien à

voir"...

Le premier est de type T* (pointeur sur un
objet du tableau), le second est de type (T*)[SIZE] (pointeur sur un tableau
d'une taille définie). Rien à voir.
Certainement pas (T*)[SIZE]. Peut-être T(*)[SIZE], en tout cas ça

s'écrira:
typedef T(*TypeDefini)[SIZE];
ou
T(*TypeDefini)[SIZE] = &UnTableau;


T'es sûr que tu sais de quoi tu parles ? Il serait peut être le temps de t'y
mettre au lieu de nous abreuver de ta logorhée sans fin...
logorrhée. C'est un mot compliqué, je l'admets, tout comme certains

types pas évidents.
Sinon, c'est quoi, aujourd'hui ? Hémorroïdes, estomac, perspective de
la grand-messe du dimanche ?

--
Pierre Maurette


Avatar
Emmanuel Delahaye


argv[]


argv[] est un tableau ? Interessant. De quelle taille ?


C'est un tableau de type incomplet. Extrait de la norme:
"An array type of unknown size is an incomplete type"


Dans le cadre d'un paramètre ? J'en doute. EN tout cas, cette phrase
signifie

"Un type tableau de taille inconnue est un type incomplet". Il n'est pas
question de tableau mais de type...

L'anglais, c'est comme le reste, ça s'apprend...

Certes. Pas exactement le même type. Mais de là à écrire "ien à voir"...

Le premier est de type T* (pointeur sur un objet du tableau), le
second est de type (T*)[SIZE] (pointeur sur un tableau d'une taille
définie). Rien à voir.


Certainement pas (T*)[SIZE]. Peut-être T(*)[SIZE], en tout cas ça s'écrira:


Ok, j'ai toujours eu du mal avec cette notation étrange...

typedef T(*TypeDefini)[SIZE];
ou
T(*TypeDefini)[SIZE] = &UnTableau;


Le & fait toute la différence.

--
C is a sharp tool



Avatar
sinx77

"Un type tableau de taille[..]


Excuse moi Emmanuel mais ça doit faire peut être 2 ans que je lis
`fr.comp.lang.c' tous les jours et je hais tes messages. A chaque fois
que je les lis, je trouve que t'es arrogant et que tu te la pètes
alors que souvent tu fais le mec qui corrige les gens et tu t'attiches.
Je me rappelle d'ailleurs une fois ou Gabriel Dos Reis t'avait
remballé et là encore Pierre Maurette qui a toujours posté des
messages sympas et utiles, tu veux le corriger et voilà quoi tu fais
tiep et en plus de ça c'est limite si tu l'agresses, vraiment je
trouve ça nul. Alors je me demande: ça t'arrive d'être aimable dans
la vie parfois? t'es obligé d'être comme ça arrogant et faire le mec
tout le temps?

Avatar
Stephane Legras-Decussy
sinx77 a écrit dans le message :

A chaque fois
que je les lis, je trouve que t'es arrogant et que tu te la pètes


et pourquoi il se la pèterait pas ?

Pierre Maurette qui a toujours posté des
messages sympas et utiles,


LOL

Avatar
sinx77
Stephane Legras-Decussy a écrit:

| et pourquoi il se la pèterait pas ?

Bah ça se fait pas attends... ya personne d'autre qui se la pète
comme ça à part lui... en plus voilà quoi, comparé à Gabriel Dos
Reis qui travaille sur gcc ou bien Horst Kraemer ou Antoine Leca dont
les messages m'ont souvent semblés pertinents ya pas photo.

| > Pierre Maurette qui a toujours posté des
| > messages sympas et utiles,

| LOL

lol ? Bah moi je trouve... c'est mon avis, il vousvoie déja, puis j'ai
beaucoup appris avec sa manière d'expliquer. Et encore une fois
pareil, Pierre Maurette a écrit un livre sur l'assembleur, et à mon
avis il doit avoir plus de 20 ans d'expérience en C derrière lui et
lorsqu'il vient poser une question sur fr.comp.lang.php c'est avec
humilité.

Après ya les suceurs comme toi ou Vhon Toa ou chai pas quoi qui le
kiffent alors qu'il fait que se la péter.
Avatar
Pierre Maurette
Stephane Legras-Decussy a écrit:

et pourquoi il se la pèterait pas ?


Bah ça se fait pas attends... ya personne d'autre qui se la pète
comme ça à part lui... en plus voilà quoi, comparé à Gabriel Dos
Reis qui travaille sur gcc ou bien Horst Kraemer ou Antoine Leca dont
les messages m'ont souvent semblés pertinents ya pas photo.

Pierre Maurette qui a toujours posté des
messages sympas et utiles,


LOL


lol ? Bah moi je trouve... c'est mon avis, il vousvoie déja, puis j'ai
beaucoup appris avec sa manière d'expliquer. Et encore une fois
pareil, Pierre Maurette a écrit un livre sur l'assembleur, et à mon
avis il doit avoir plus de 20 ans d'expérience en C derrière lui et
Stoooop. Là, vous allez au clash, et moi avec vous (qu'est-ce qu'on se

marre, et pourtant c'est un lundi) ;-)
Je vais faire plaisir à certains, mais je pense qu'on est pas tenu de
savoir tout pour expliquer l'essentiel. Je sens que ça va gueuler.

lorsqu'il vient poser une question sur fr.comp.lang.php c'est avec
humilité.
En espérant que dans un an il y aura un sinx77 pour me prêter 10 ans

(on peut difficilement faire plus en restant crédible) d'expérience en
PHP ?

Après ya les suceurs comme toi ou Vhon Toa ou chai pas quoi qui le
kiffent alors qu'il fait que se la péter.
Vous utilisez un langage (pas le C ni le PHP, je pensais à "suceurs")

qui plaira à Stéphane, que je croise parfois sur des rues mal famées de
l'usenet, où nous nous encanaillons de concert.

Voilà, je vous remercie de votre soutien, mais il y a surtout de
l'humour dans nos joutes (je suis Sètois) avec Emmanuel. Je ne peux pas
croire que ce ne soit pas partagé.

Au fait, quelle est votre question sur le langage C ?

--
Pierre Maurette



Avatar
Harpo
Pierre Maurette wrote:

Vous utilisez un langage (pas le C ni le PHP, je pensais à "suceurs")


D'ailleurs, on prononce 'sucoeur'

(je suis Sètois)


Pas moi.
Mais vous avez raison, on est lundi...

Ceci dit, on n'est pas là pour être aimable, ce qu'on dit concernant le
C est plus ou moins intéressant, le reste c'est de l'emballage, il en
faut un peu, chacun son style.
Et je suis sûr que Emdel, sous ses dehors de sucoeur, cache un coeur en
or qui bat pour le C.

--
Vous avez dit 'lundi' ?

Avatar
Emmanuel Delahaye
Excuse moi Emmanuel mais ça doit faire peut être 2 ans que je lis
`fr.comp.lang.c' tous les jours et je hais tes messages. A chaque fois


T'es maso ou quoi ? Marche pas ton kill file ?

--
C is a sharp tool

1 2 3