ceci n'est pas vraiment un tableau, mais un pointeur. Je sais, je pinaille, mais pour expliquer que l'initialisation ne sera pas possible...
C'est un tableau, certainement pas un pointeur.
pas vraiment : int tab1[5], tab2[5];
tab1=tab2 ne produit pas une recopie du tableau.
Parce que le langage ne supporte pas la copie des tableaux. Et alors... ? Quel rapport avec des pointeurs ? S'ils étaient des pointeurs, l'affectation serait légale.
Ce n'est pas une sémantique de valeur.
Quel rapport ? Les tableau C sont des objets deuxième classe. C'est un défaut connu du langage. Mais ça n'en fait pas des pointeurs.
Pas vraiment un tableau, quoi, mais un pointeur "caché"
Non. Vraiment un tableau. Avec toutes les restrictions que C met sur des tableaux. Certainement pas un pointeur.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Alexandre wrote:
ceci n'est pas vraiment un tableau, mais un pointeur. Je
sais, je pinaille, mais pour expliquer que l'initialisation
ne sera pas possible...
C'est un tableau, certainement pas un pointeur.
pas vraiment :
int tab1[5], tab2[5];
tab1=tab2 ne produit pas une recopie du tableau.
Parce que le langage ne supporte pas la copie des tableaux. Et
alors... ? Quel rapport avec des pointeurs ? S'ils étaient des
pointeurs, l'affectation serait légale.
Ce n'est pas une sémantique de valeur.
Quel rapport ? Les tableau C sont des objets deuxième classe.
C'est un défaut connu du langage. Mais ça n'en fait pas des
pointeurs.
Pas vraiment un tableau, quoi, mais un pointeur "caché"
Non. Vraiment un tableau. Avec toutes les restrictions que C met
sur des tableaux. Certainement pas un pointeur.
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
ceci n'est pas vraiment un tableau, mais un pointeur. Je sais, je pinaille, mais pour expliquer que l'initialisation ne sera pas possible...
C'est un tableau, certainement pas un pointeur.
pas vraiment : int tab1[5], tab2[5];
tab1=tab2 ne produit pas une recopie du tableau.
Parce que le langage ne supporte pas la copie des tableaux. Et alors... ? Quel rapport avec des pointeurs ? S'ils étaient des pointeurs, l'affectation serait légale.
Ce n'est pas une sémantique de valeur.
Quel rapport ? Les tableau C sont des objets deuxième classe. C'est un défaut connu du langage. Mais ça n'en fait pas des pointeurs.
Pas vraiment un tableau, quoi, mais un pointeur "caché"
Non. Vraiment un tableau. Avec toutes les restrictions que C met sur des tableaux. Certainement pas un pointeur.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Fabien LE LEZ
On Fri, 4 Nov 2005 19:29:59 +0100, "Alexandre" :
ceci n'est pas vraiment un tableau, mais un pointeur.
C'est bien un tableau, mais un tableau à la C, qui est une entité un peu spéciale, puisqu'il ne s'agit pas d'un objet.
Dans bien des cas (retour de fonction par exemple), seuls les objets sont acceptés. On convertit donc le tableau en un objet -- généralement, un pointeur vers le premier élément du tableau.
On Fri, 4 Nov 2005 19:29:59 +0100, "Alexandre"
<alex.g@netcourrier.com>:
ceci n'est pas vraiment un tableau, mais un pointeur.
C'est bien un tableau, mais un tableau à la C, qui est une entité un
peu spéciale, puisqu'il ne s'agit pas d'un objet.
Dans bien des cas (retour de fonction par exemple), seuls les objets
sont acceptés. On convertit donc le tableau en un objet --
généralement, un pointeur vers le premier élément du tableau.
ceci n'est pas vraiment un tableau, mais un pointeur.
C'est bien un tableau, mais un tableau à la C, qui est une entité un peu spéciale, puisqu'il ne s'agit pas d'un objet.
Dans bien des cas (retour de fonction par exemple), seuls les objets sont acceptés. On convertit donc le tableau en un objet -- généralement, un pointeur vers le premier élément du tableau.
Fabien LE LEZ
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre" :
je ne trouve pas, au sens littéral du terme, puisque la variable tableau n'est ni copiable ni assignable, elle possède plutôt une sémantique d'adresse. Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut s'utiliser comme.
C'est un tableau, mais pas un objet tableau. Il ne supporte pas la copie "directe", puisque ce n'est pas un objet, mais s'il est contenu dans un objet, il est copié lors de la copie de cet objet :
class A { int tableau[42]; int *pointeur; A(); };
int main() { A a; A b= a; // le membre "tableau" est bien copié ; le membre "pointeur" aussi, mais pas la variable pointée. }
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre"
<alex.g@netcourrier.com>:
je ne trouve pas, au sens littéral du terme, puisque la variable tableau
n'est ni copiable ni assignable, elle possède plutôt une sémantique
d'adresse. Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut
s'utiliser comme.
C'est un tableau, mais pas un objet tableau.
Il ne supporte pas la copie "directe", puisque ce n'est pas un objet,
mais s'il est contenu dans un objet, il est copié lors de la copie de
cet objet :
class A
{
int tableau[42];
int *pointeur;
A();
};
int main()
{
A a;
A b= a; // le membre "tableau" est bien copié ; le membre
"pointeur" aussi, mais pas la variable pointée.
}
je ne trouve pas, au sens littéral du terme, puisque la variable tableau n'est ni copiable ni assignable, elle possède plutôt une sémantique d'adresse. Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut s'utiliser comme.
C'est un tableau, mais pas un objet tableau. Il ne supporte pas la copie "directe", puisque ce n'est pas un objet, mais s'il est contenu dans un objet, il est copié lors de la copie de cet objet :
class A { int tableau[42]; int *pointeur; A(); };
int main() { A a; A b= a; // le membre "tableau" est bien copié ; le membre "pointeur" aussi, mais pas la variable pointée. }
James Kanze
Alexandre wrote:
ceci n'est pas vraiment un tableau, mais un pointeur.
Dans quel langage ? En C++, c'est un tableau.
je ne trouve pas, au sens littéral du terme,
Au sens littéral du terme, un tableau de type C est un tableau. C-à-d une suite d'éléments du même type. Il n'y a aucune doute possible. (Voir §8.3.4 de la norme.)
puisque la variable tableau n'est ni copiable ni assignable,
Quel rapport ? C'est une restriction, qui fait qu'effectivement, des tableaux sont des types de la deuxième classe.
À l'encontre d'un pointeur, qui est copiable et affectable.
elle possède plutôt une sémantique d'adresse.
Aucune sémantique d'adresse. Tout au plus une conversion implicite dans certains cas bien précis.
Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut s'utiliser comme.
D'où est-ce que tu tires ça ? C'est un tableau. Dans certains cas bien précis, il se convertit en pointeur ; dans ces cas (et seulement dans ces cas), il peut s'utiliser comme un pointeur. De même que la constante 0 peut s'utiliser comme un pointeur (mais n'est pas un pointeur).
il reste des cas où les « bons » vieux tableaux de C sont à préférer.
tout à fait, d'ailleurs ça m'arrive très souvent, mais je trouve que le terme "tableau" est un peu usurpé ici.
Cependant, c'est bien ce qu'il est.
De même, peut-on vraiment dire qu'un (char *) est une chaîne de caractères ?
Pas forcement. C'est un pointeur à un char. Dans la mesure qu'un pointeur n'est pas une chaîne, et un char n'est pas un caractère, j'ai du mal à considérer un char* comme une chaîne de caractères. Tout au plus : faute de mieux, j'utilise char pour stocker des caractères -- si char* pointe au premier char d'une suite de char dans laquelle on a stocké une chaîne de caractères, il sert à localiser une chaîne de caractères. (Chose qui est extrèmement rare en C++.)
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Alexandre wrote:
ceci n'est pas vraiment un tableau, mais un pointeur.
Dans quel langage ? En C++, c'est un tableau.
je ne trouve pas, au sens littéral du terme,
Au sens littéral du terme, un tableau de type C est un tableau.
C-à-d une suite d'éléments du même type. Il n'y a aucune doute
possible. (Voir §8.3.4 de la norme.)
puisque la variable tableau n'est ni copiable ni assignable,
Quel rapport ? C'est une restriction, qui fait qu'effectivement,
des tableaux sont des types de la deuxième classe.
À l'encontre d'un pointeur, qui est copiable et affectable.
elle possède plutôt une sémantique d'adresse.
Aucune sémantique d'adresse. Tout au plus une conversion
implicite dans certains cas bien précis.
Donc pour moi, au sens strict, ce n'est pas un tableau. ça
peut s'utiliser comme.
D'où est-ce que tu tires ça ? C'est un tableau. Dans certains
cas bien précis, il se convertit en pointeur ; dans ces cas (et
seulement dans ces cas), il peut s'utiliser comme un pointeur.
De même que la constante 0 peut s'utiliser comme un pointeur
(mais n'est pas un pointeur).
il reste des cas où les « bons » vieux tableaux de C sont à
préférer.
tout à fait, d'ailleurs ça m'arrive très souvent, mais je
trouve que le terme "tableau" est un peu usurpé ici.
Cependant, c'est bien ce qu'il est.
De même, peut-on vraiment dire qu'un (char *) est une chaîne
de caractères ?
Pas forcement. C'est un pointeur à un char. Dans la mesure qu'un
pointeur n'est pas une chaîne, et un char n'est pas un
caractère, j'ai du mal à considérer un char* comme une chaîne de
caractères. Tout au plus : faute de mieux, j'utilise char pour
stocker des caractères -- si char* pointe au premier char d'une
suite de char dans laquelle on a stocké une chaîne de
caractères, il sert à localiser une chaîne de caractères. (Chose
qui est extrèmement rare en C++.)
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
ceci n'est pas vraiment un tableau, mais un pointeur.
Dans quel langage ? En C++, c'est un tableau.
je ne trouve pas, au sens littéral du terme,
Au sens littéral du terme, un tableau de type C est un tableau. C-à-d une suite d'éléments du même type. Il n'y a aucune doute possible. (Voir §8.3.4 de la norme.)
puisque la variable tableau n'est ni copiable ni assignable,
Quel rapport ? C'est une restriction, qui fait qu'effectivement, des tableaux sont des types de la deuxième classe.
À l'encontre d'un pointeur, qui est copiable et affectable.
elle possède plutôt une sémantique d'adresse.
Aucune sémantique d'adresse. Tout au plus une conversion implicite dans certains cas bien précis.
Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut s'utiliser comme.
D'où est-ce que tu tires ça ? C'est un tableau. Dans certains cas bien précis, il se convertit en pointeur ; dans ces cas (et seulement dans ces cas), il peut s'utiliser comme un pointeur. De même que la constante 0 peut s'utiliser comme un pointeur (mais n'est pas un pointeur).
il reste des cas où les « bons » vieux tableaux de C sont à préférer.
tout à fait, d'ailleurs ça m'arrive très souvent, mais je trouve que le terme "tableau" est un peu usurpé ici.
Cependant, c'est bien ce qu'il est.
De même, peut-on vraiment dire qu'un (char *) est une chaîne de caractères ?
Pas forcement. C'est un pointeur à un char. Dans la mesure qu'un pointeur n'est pas une chaîne, et un char n'est pas un caractère, j'ai du mal à considérer un char* comme une chaîne de caractères. Tout au plus : faute de mieux, j'utilise char pour stocker des caractères -- si char* pointe au premier char d'une suite de char dans laquelle on a stocké une chaîne de caractères, il sert à localiser une chaîne de caractères. (Chose qui est extrèmement rare en C++.)
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Fabien LE LEZ
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre" :
De même, peut-on vraiment dire qu'un (char *) est une chaîne de caractères ?
Non. C'est un pointeur vers un "char". Typiquement, vers le premier élément d'un tableau de "char". Si ce tableau de "char" contient un caractère ' ', ce pointeur peut avoir une sémantique de chaîne de caractères.
Note que std::string est aussi un tableau, fondamentalement pas très différent de std::vector<char>, mais conçu pour être utilisé comme un objet "chaîne de caractères".
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre"
<alex.g@netcourrier.com>:
De même, peut-on vraiment dire qu'un
(char *) est une chaîne de caractères ?
Non. C'est un pointeur vers un "char". Typiquement, vers le premier
élément d'un tableau de "char". Si ce tableau de "char" contient un
caractère ' ', ce pointeur peut avoir une sémantique de chaîne de
caractères.
Note que std::string est aussi un tableau, fondamentalement pas très
différent de std::vector<char>, mais conçu pour être utilisé comme un
objet "chaîne de caractères".
De même, peut-on vraiment dire qu'un (char *) est une chaîne de caractères ?
Non. C'est un pointeur vers un "char". Typiquement, vers le premier élément d'un tableau de "char". Si ce tableau de "char" contient un caractère ' ', ce pointeur peut avoir une sémantique de chaîne de caractères.
Note que std::string est aussi un tableau, fondamentalement pas très différent de std::vector<char>, mais conçu pour être utilisé comme un objet "chaîne de caractères".
Fabien LE LEZ
On Sun, 06 Nov 2005 17:09:50 +0100, James Kanze :
si char* pointe au premier char d'une suite de char dans laquelle on a stocké une chaîne de caractères, il sert à localiser une chaîne de caractères. (Chose qui est extrèmement rare en C++.)
On Sun, 06 Nov 2005 17:09:50 +0100, James Kanze <kanze@none>:
si char* pointe au premier char d'une
suite de char dans laquelle on a stocké une chaîne de
caractères, il sert à localiser une chaîne de caractères. (Chose
qui est extrèmement rare en C++.)
si char* pointe au premier char d'une suite de char dans laquelle on a stocké une chaîne de caractères, il sert à localiser une chaîne de caractères. (Chose qui est extrèmement rare en C++.)
je ne trouve pas, au sens littéral du terme, puisque la variable tableau n'est ni copiable ni assignable, elle possède plutôt une sémantique d'adresse. Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut s'utiliser comme.
C'est un tableau, mais pas un objet tableau.
C'est aussi un objet.
Il ne supporte pas la copie "directe", puisque ce n'est pas un objet,
Il ne supporte pas la copie, parce que la norme dit qu'il ne le supporte pas. C'est tout. Mais c'est un objet, au sens de la norme. Un objet deuxième classe, mais un objet quand même.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Fabien LE LEZ wrote:
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre"
<alex.g@netcourrier.com>:
je ne trouve pas, au sens littéral du terme, puisque la
variable tableau n'est ni copiable ni assignable, elle possède
plutôt une sémantique d'adresse. Donc pour moi, au sens
strict, ce n'est pas un tableau. ça peut s'utiliser comme.
C'est un tableau, mais pas un objet tableau.
C'est aussi un objet.
Il ne supporte pas la copie "directe", puisque ce n'est pas un
objet,
Il ne supporte pas la copie, parce que la norme dit qu'il ne le
supporte pas. C'est tout. Mais c'est un objet, au sens de la
norme. Un objet deuxième classe, mais un objet quand même.
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
je ne trouve pas, au sens littéral du terme, puisque la variable tableau n'est ni copiable ni assignable, elle possède plutôt une sémantique d'adresse. Donc pour moi, au sens strict, ce n'est pas un tableau. ça peut s'utiliser comme.
C'est un tableau, mais pas un objet tableau.
C'est aussi un objet.
Il ne supporte pas la copie "directe", puisque ce n'est pas un objet,
Il ne supporte pas la copie, parce que la norme dit qu'il ne le supporte pas. C'est tout. Mais c'est un objet, au sens de la norme. Un objet deuxième classe, mais un objet quand même.
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
James Kanze
Fabien LE LEZ wrote:
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre" :
Note que std::string est aussi un tableau, fondamentalement pas très différent de std::vector<char>, mais conçu pour être utilisé comme un objet "chaîne de caractères".
Ça se discute. Si c'était conçu pour être une « chaîne de caractères », où en sont les fonctionnalités ? Genre trim() (ôter les espèces blancs des bouts). Ou même simplement une fonction pour dire combien de caractères il y en a dans la chaîne.
En regardant bien, il faut constater que le C++ n'a pas de type de donnée pour des caractères (où il n'a peut-être pas tort). Et que std::string n'est qu'une vulgaire suite de char (et non de caractères).
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Fabien LE LEZ wrote:
On Sun, 6 Nov 2005 10:27:36 +0100, "Alexandre"
<alex.g@netcourrier.com>:
Note que std::string est aussi un tableau, fondamentalement
pas très différent de std::vector<char>, mais conçu pour être
utilisé comme un objet "chaîne de caractères".
Ça se discute. Si c'était conçu pour être une « chaîne de
caractères », où en sont les fonctionnalités ? Genre trim()
(ôter les espèces blancs des bouts). Ou même simplement une
fonction pour dire combien de caractères il y en a dans la
chaîne.
En regardant bien, il faut constater que le C++ n'a pas de type
de donnée pour des caractères (où il n'a peut-être pas tort). Et
que std::string n'est qu'une vulgaire suite de char (et non de
caractères).
--
James Kanze mailto: james.kanze@free.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Note que std::string est aussi un tableau, fondamentalement pas très différent de std::vector<char>, mais conçu pour être utilisé comme un objet "chaîne de caractères".
Ça se discute. Si c'était conçu pour être une « chaîne de caractères », où en sont les fonctionnalités ? Genre trim() (ôter les espèces blancs des bouts). Ou même simplement une fonction pour dire combien de caractères il y en a dans la chaîne.
En regardant bien, il faut constater que le C++ n'a pas de type de donnée pour des caractères (où il n'a peut-être pas tort). Et que std::string n'est qu'une vulgaire suite de char (et non de caractères).
-- James Kanze mailto: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34