L'utilisation d'indices négatifs pour un sous tableau
6 réponses
Luc
Bonjour,
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif
pour un tableau. Mais le K&R précise que c'est parfaitement
autorisé pour un sous tableau alors je me suis mis en tête de tester cela.
Voilà mon petit essai et ça semble bien fonctionner.
Mais suis-je toujours dans la légalité
par rapport au langage C ?
#include <stdio.h>
#include <stdlib.h>
#define INDICE_TAB 9
void MaFonction();
int main(int argc, char **argv) {
int tab[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Marc Lasson
Luc a écrit:
Bonjour, Salut,
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif pour un tableau. Mais le K&R précise que c'est parfaitement autorisé pour un sous tableau alors je me suis mis en tête de tester cela. Voilà mon petit essai et ça semble bien fonctionner. Il fonctionne.
Mais suis-je toujours dans la légalité par rapport au langage C ? Tu n'iras pas en prison aujourd'hui.
#include <stdio.h> #include <stdlib.h>
#define INDICE_TAB 9
void MaFonction(); Tu peux faire ca... mais bon, amha, c'est pas très gentil pour le
lecteur, je préférerais que tu mettes les paramètres de ta fonction, ou mieux encore: que tu la définnises avant (comme ca: tu économises le prototype).
<snip le reste du code, correct>
Les règles sont simples:
- Pas d'indice négatif pour un tableau. - Si p est un pointeur, pour tout int i, *(p + i) peut s'écrire p[i] (meme pour i < 0). ( - Le nom d'un tableau est l'adresse de son premier élément. )
Toi ce que tu as fait :
- Tu as passé l'adresse d'un element du tableau. - Tu la ranges dans un pointeur. - Et tu utilises le pointeur, avec la notation vu dans la seconde règle.
Aucun problèmes.
-- Marc.
Luc a écrit:
Bonjour,
Salut,
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif
pour un tableau. Mais le K&R précise que c'est parfaitement
autorisé pour un sous tableau alors je me suis mis en tête de tester cela.
Voilà mon petit essai et ça semble bien fonctionner.
Il fonctionne.
Mais suis-je toujours dans la légalité
par rapport au langage C ?
Tu n'iras pas en prison aujourd'hui.
#include <stdio.h>
#include <stdlib.h>
#define INDICE_TAB 9
void MaFonction();
Tu peux faire ca... mais bon, amha, c'est pas très gentil pour le
lecteur, je préférerais que tu mettes les paramètres de ta fonction,
ou mieux encore: que tu la définnises avant (comme ca: tu économises
le prototype).
<snip le reste du code, correct>
Les règles sont simples:
- Pas d'indice négatif pour un tableau.
- Si p est un pointeur, pour tout int i, *(p + i) peut
s'écrire p[i] (meme pour i < 0).
( - Le nom d'un tableau est l'adresse de son premier élément. )
Toi ce que tu as fait :
- Tu as passé l'adresse d'un element du tableau.
- Tu la ranges dans un pointeur.
- Et tu utilises le pointeur, avec la notation vu dans la
seconde règle.
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif pour un tableau. Mais le K&R précise que c'est parfaitement autorisé pour un sous tableau alors je me suis mis en tête de tester cela. Voilà mon petit essai et ça semble bien fonctionner. Il fonctionne.
Mais suis-je toujours dans la légalité par rapport au langage C ? Tu n'iras pas en prison aujourd'hui.
#include <stdio.h> #include <stdlib.h>
#define INDICE_TAB 9
void MaFonction(); Tu peux faire ca... mais bon, amha, c'est pas très gentil pour le
lecteur, je préférerais que tu mettes les paramètres de ta fonction, ou mieux encore: que tu la définnises avant (comme ca: tu économises le prototype).
<snip le reste du code, correct>
Les règles sont simples:
- Pas d'indice négatif pour un tableau. - Si p est un pointeur, pour tout int i, *(p + i) peut s'écrire p[i] (meme pour i < 0). ( - Le nom d'un tableau est l'adresse de son premier élément. )
Toi ce que tu as fait :
- Tu as passé l'adresse d'un element du tableau. - Tu la ranges dans un pointeur. - Et tu utilises le pointeur, avec la notation vu dans la seconde règle.
Aucun problèmes.
-- Marc.
Emmanuel Delahaye
In 'fr.comp.lang.c', "Luc" <...> wrote:
Bonjour,
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif pour un tableau.
Certes. Les indices autorisés d'un tableau de taille N iront de 0 à N-1. C'est immuable.
Mais le K&R précise que c'est parfaitement autorisé pour un sous tableau alors je me suis mis en tête de tester cela.
"Sous Tableau", on est bien d'accord?
Voilà mon petit essai et ça semble bien fonctionner. Mais suis-je toujours dans la légalité par rapport au langage C ?
#include <stdio.h> #include <stdlib.h>
#define INDICE_TAB 9
void MaFonction();
Cette declaration n'est pas un prototype valide. Il n'est pas nécessaire d'utiliser un prototype séparé si on suit la regle de conception simple "définir avant d'utiliser".
int main(int argc, char **argv) {
Les paramètres ne sont pas utilisés.
int tab[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
MaFonction(&tab[INDICE_TAB], INDICE_TAB);
Une façon compliquée d'écrire:
MaFonction (tab + INDICE_TAB, INDICE_TAB);
return EXIT_SUCCESS; }
void MaFonction(int *ptr, int indice) {
Le terme 'indice' est mal choisi. J'aurais plutôt dit 'taille', car en fait, l'indice valide va de 0 à - (taille - 1).
int i;
for(i = 0 ; i >= -indice; i--)
Merci de toujours mettre les {}, ça aide...
{
Je rajoute un petit contrôle de cohérence.
assert (i <= 0); assert (i > -indice);
printf("%dn", ptr[i]);
Il aurait été pédagogique d'afficher l'indice. }
}
Ok, mais je pense que le type requis pour 'i' est ptrdiff_t...
Ca reste quand même extèmement tordu intellectuellement. Attention à l'entorse du lobe frontal.
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Luc" <...> wrote:
Bonjour,
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif
pour un tableau.
Certes. Les indices autorisés d'un tableau de taille N iront de 0 à N-1.
C'est immuable.
Mais le K&R précise que c'est parfaitement
autorisé pour un sous tableau alors je me suis mis en tête de tester cela.
"Sous Tableau", on est bien d'accord?
Voilà mon petit essai et ça semble bien fonctionner.
Mais suis-je toujours dans la légalité
par rapport au langage C ?
#include <stdio.h>
#include <stdlib.h>
#define INDICE_TAB 9
void MaFonction();
Cette declaration n'est pas un prototype valide. Il n'est pas nécessaire
d'utiliser un prototype séparé si on suit la regle de conception simple
"définir avant d'utiliser".
int main(int argc, char **argv) {
Les paramètres ne sont pas utilisés.
int tab[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
MaFonction(&tab[INDICE_TAB], INDICE_TAB);
Une façon compliquée d'écrire:
MaFonction (tab + INDICE_TAB, INDICE_TAB);
return EXIT_SUCCESS;
}
void MaFonction(int *ptr, int indice) {
Le terme 'indice' est mal choisi. J'aurais plutôt dit 'taille', car en fait,
l'indice valide va de 0 à - (taille - 1).
int i;
for(i = 0 ; i >= -indice; i--)
Merci de toujours mettre les {}, ça aide...
{
Je rajoute un petit contrôle de cohérence.
assert (i <= 0);
assert (i > -indice);
printf("%dn", ptr[i]);
Il aurait été pédagogique d'afficher l'indice.
}
}
Ok, mais je pense que le type requis pour 'i' est ptrdiff_t...
Ca reste quand même extèmement tordu intellectuellement. Attention à
l'entorse du lobe frontal.
J'ai lu que l'on ne pouvait pas utiliser d'indice négatif pour un tableau.
Certes. Les indices autorisés d'un tableau de taille N iront de 0 à N-1. C'est immuable.
Mais le K&R précise que c'est parfaitement autorisé pour un sous tableau alors je me suis mis en tête de tester cela.
"Sous Tableau", on est bien d'accord?
Voilà mon petit essai et ça semble bien fonctionner. Mais suis-je toujours dans la légalité par rapport au langage C ?
#include <stdio.h> #include <stdlib.h>
#define INDICE_TAB 9
void MaFonction();
Cette declaration n'est pas un prototype valide. Il n'est pas nécessaire d'utiliser un prototype séparé si on suit la regle de conception simple "définir avant d'utiliser".
int main(int argc, char **argv) {
Les paramètres ne sont pas utilisés.
int tab[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
MaFonction(&tab[INDICE_TAB], INDICE_TAB);
Une façon compliquée d'écrire:
MaFonction (tab + INDICE_TAB, INDICE_TAB);
return EXIT_SUCCESS; }
void MaFonction(int *ptr, int indice) {
Le terme 'indice' est mal choisi. J'aurais plutôt dit 'taille', car en fait, l'indice valide va de 0 à - (taille - 1).
int i;
for(i = 0 ; i >= -indice; i--)
Merci de toujours mettre les {}, ça aide...
{
Je rajoute un petit contrôle de cohérence.
assert (i <= 0); assert (i > -indice);
printf("%dn", ptr[i]);
Il aurait été pédagogique d'afficher l'indice. }
}
Ok, mais je pense que le type requis pour 'i' est ptrdiff_t...
Ca reste quand même extèmement tordu intellectuellement. Attention à l'entorse du lobe frontal.
je ne connais pas "assert" et je ne sais pas à quoi ça sert.
Maintenant que tu as ouvert ton livre de C, tu sais!
Il fait trop chaud pour tourner les pages...
C'est l'idée de parcourir un sous tableau avec des indices négatifs qui est tordue ou mon code ?
L'idée...
Je suis d'accord mais c'était juste pour "voir" cela. Luc
Emmanuel Delahaye
In 'fr.comp.lang.c', "Luc" <...> wrote:
Maintenant que tu as ouvert ton livre de C, tu sais!
Il fait trop chaud pour tourner les pages...
Erreur! Tourner les pages produit un déplacement d'air non négligeable, donc une légère évaporation sur la peau, donc un léger abaissement de la température externe!
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Luc" <...> wrote:
Maintenant que tu as ouvert ton livre de C, tu sais!
Il fait trop chaud pour tourner les pages...
Erreur! Tourner les pages produit un déplacement d'air non négligeable, donc
une légère évaporation sur la peau, donc un léger abaissement de la
température externe!
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Maintenant que tu as ouvert ton livre de C, tu sais!
Il fait trop chaud pour tourner les pages...
Erreur! Tourner les pages produit un déplacement d'air non négligeable, donc une légère évaporation sur la peau, donc un léger abaissement de la température externe!
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/