int main ()
{
int stack[] = { 0, 1, 2, 3, 4, 5, 6 };
unsigned int taille_stack= sizeof stack / sizeof *stack;
/* Ou, si on veut faire dans l'illisible ;-) :
unsigned int const taille_stack= sizeof
stack / (sizeof * stack);
*/
//int *adr = &stack[VALUE];
int *adr= stack + taille_stack; /* Je n'aime pas l'idée d'écrire
le nom d'une variable qui n'existe pas -- ici, stack[taille_stack] */
for (int i=0; i<taille_stack; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: "
<< (void*)(stack + i) << endl;
}
return 0;
}
Du coup, la variable "adr" n'est plus utilisée, mais je ne sais pas à
quoi elle sert de toutes façons, vu que c'est un pointeur qui pointe
sur rien. D'ailleurs je ne sais même pas si l'écriture "stack +
taille_stack" est valide...
int main ()
{
int stack[] = { 0, 1, 2, 3, 4, 5, 6 };
unsigned int taille_stack= sizeof stack / sizeof *stack;
/* Ou, si on veut faire dans l'illisible ;-) :
unsigned int const taille_stack= sizeof
stack / (sizeof * stack);
*/
//int *adr = &stack[VALUE];
int *adr= stack + taille_stack; /* Je n'aime pas l'idée d'écrire
le nom d'une variable qui n'existe pas -- ici, stack[taille_stack] */
for (int i=0; i<taille_stack; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: "
<< (void*)(stack + i) << endl;
}
return 0;
}
Du coup, la variable "adr" n'est plus utilisée, mais je ne sais pas à
quoi elle sert de toutes façons, vu que c'est un pointeur qui pointe
sur rien. D'ailleurs je ne sais même pas si l'écriture "stack +
taille_stack" est valide...
int main ()
{
int stack[] = { 0, 1, 2, 3, 4, 5, 6 };
unsigned int taille_stack= sizeof stack / sizeof *stack;
/* Ou, si on veut faire dans l'illisible ;-) :
unsigned int const taille_stack= sizeof
stack / (sizeof * stack);
*/
//int *adr = &stack[VALUE];
int *adr= stack + taille_stack; /* Je n'aime pas l'idée d'écrire
le nom d'une variable qui n'existe pas -- ici, stack[taille_stack] */
for (int i=0; i<taille_stack; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: "
<< (void*)(stack + i) << endl;
}
return 0;
}
Du coup, la variable "adr" n'est plus utilisée, mais je ne sais pas à
quoi elle sert de toutes façons, vu que c'est un pointeur qui pointe
sur rien. D'ailleurs je ne sais même pas si l'écriture "stack +
taille_stack" est valide...
Bonjour !
je voudrais juste un petit éclaircissement concernant mon code.
#include <iostream>
using namespace std;
#define VALUE 7
int main ()
{
int stack[VALUE] = { 0, 1, 2, 3, 4, 5, 6 };
int *adr = &stack[VALUE];
for (int i=0; i<=6; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: " << adr << endl;
}
return 0;
}
Je de demande si toutes les valeurs de mon tableau ont la meme adresse,
ou bien si c'est une erreur de ma part.
Considérons la question comme portant plus sur C que C++.
Bonjour !
je voudrais juste un petit éclaircissement concernant mon code.
#include <iostream>
using namespace std;
#define VALUE 7
int main ()
{
int stack[VALUE] = { 0, 1, 2, 3, 4, 5, 6 };
int *adr = &stack[VALUE];
for (int i=0; i<=6; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: " << adr << endl;
}
return 0;
}
Je de demande si toutes les valeurs de mon tableau ont la meme adresse,
ou bien si c'est une erreur de ma part.
Considérons la question comme portant plus sur C que C++.
Bonjour !
je voudrais juste un petit éclaircissement concernant mon code.
#include <iostream>
using namespace std;
#define VALUE 7
int main ()
{
int stack[VALUE] = { 0, 1, 2, 3, 4, 5, 6 };
int *adr = &stack[VALUE];
for (int i=0; i<=6; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: " << adr << endl;
}
return 0;
}
Je de demande si toutes les valeurs de mon tableau ont la meme adresse,
ou bien si c'est une erreur de ma part.
Considérons la question comme portant plus sur C que C++.
Ben oui, a part cout, le reste c'est des tableaux et des pointeurs.
Si je remplace cout par printf, j'ai un beau programme C...
donc un programme C++, non ?
Ben oui, a part cout, le reste c'est des tableaux et des pointeurs.
Si je remplace cout par printf, j'ai un beau programme C...
donc un programme C++, non ?
Ben oui, a part cout, le reste c'est des tableaux et des pointeurs.
Si je remplace cout par printf, j'ai un beau programme C...
donc un programme C++, non ?
On Tue, 18 May 2004 18:37:19 +0200, "Alexandre"
wrote:P.S. c'est du C, pas du C++ ;-)
Ah ?
Plus précisément, un programmeur C++ programmerait ça assez
différemment. Si tu prends du code C, pondu par un programmeur bien
compétent et tout et tout, et que tu remplaces "printf" par "cout" et
"malloc" par "new[]", ça ne donne pas un bon programme C++ -- la
structure du programme reste très typé "C".
Enfin, de toutes façons, si le "#define" fait franchement tache sur
fclc++, même sur fclc il ne me paraîtrait pas génial :
- d'une part, une constante entière conviendrait (je crois) dans les
deux langages, même si j'ai un doute sur la présence de "const" en C ;
- d'autre part, le nom "VALUE" ne convient vraiment pas ;
- enfin, il ne sert pas à grand-chose, surtout qu'il n'est pas
utilisé au seul endroit utile, i.e. dans la boucle for.
Ça pourrait donner un machin du style :
int main ()
{
int stack[] = { 0, 1, 2, 3, 4, 5, 6 };
unsigned int taille_stack= sizeof stack / sizeof *stack;
/* Ou, si on veut faire dans l'illisible ;-) :
unsigned int const taille_stack= sizeof
stack / (sizeof * stack);
*/
//int *adr = &stack[VALUE];
int *adr= stack + taille_stack; /* Je n'aime pas l'idée d'écrire
le nom d'une variable qui n'existe pas -- ici, stack[taille_stack] */
for (int i=0; i<taille_stack; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: "
<< (void*)(stack + i) << endl;
}
return 0;
}
Du coup, la variable "adr" n'est plus utilisée, mais je ne sais pas à
quoi elle sert de toutes façons, vu que c'est un pointeur qui pointe
sur rien. D'ailleurs je ne sais même pas si l'écriture "stack +
taille_stack" est valide...
Note : c'est difficile de dire si c'est vraiment du C++ ou juste du C
habillé en C++, car c'set juste un petit bout de code pour essayer de
comprendre les rouages internes, plus que du code qui fait réellement
quelque chose. Note tout de même que parcourir un tableau avec un
for(int indice...), et donc faire afficher "stack[i]" est assez rare
-- d'ailleurs, si le tableau en question est un std::list<>, ce n'est
même pas possible.
En oubliant les indices, et en n'affichant que la valeur, on peut
s'amuser à remplacer la boucle for() par un :
for_each (stack, stack+taille_stack, AfficheValeurEtAdresse);
avec AfficheValeurEtAdresse défini comme suit :
template <class T> void AfficheValeurEtAdresse (T const& t)
{
cout << t << " a l'adresse " << (void*)(&t) << endl;
}
Note : le "template", loin de compliquer les choses, ou même de tendre
vers la généricité, permet juste de ne pas se préoccuper du type passé
-- et c'est souvent bien agréable, surtout quand le type est un
"std::map <MaClasse::Machin, MonAutreClasse::Truc>::const_iterator"
;-)
On Tue, 18 May 2004 18:37:19 +0200, "Alexandre"
<alex.g@netcourrier.com> wrote:
P.S. c'est du C, pas du C++ ;-)
Ah ?
Plus précisément, un programmeur C++ programmerait ça assez
différemment. Si tu prends du code C, pondu par un programmeur bien
compétent et tout et tout, et que tu remplaces "printf" par "cout" et
"malloc" par "new[]", ça ne donne pas un bon programme C++ -- la
structure du programme reste très typé "C".
Enfin, de toutes façons, si le "#define" fait franchement tache sur
fclc++, même sur fclc il ne me paraîtrait pas génial :
- d'une part, une constante entière conviendrait (je crois) dans les
deux langages, même si j'ai un doute sur la présence de "const" en C ;
- d'autre part, le nom "VALUE" ne convient vraiment pas ;
- enfin, il ne sert pas à grand-chose, surtout qu'il n'est pas
utilisé au seul endroit utile, i.e. dans la boucle for.
Ça pourrait donner un machin du style :
int main ()
{
int stack[] = { 0, 1, 2, 3, 4, 5, 6 };
unsigned int taille_stack= sizeof stack / sizeof *stack;
/* Ou, si on veut faire dans l'illisible ;-) :
unsigned int const taille_stack= sizeof
stack / (sizeof * stack);
*/
//int *adr = &stack[VALUE];
int *adr= stack + taille_stack; /* Je n'aime pas l'idée d'écrire
le nom d'une variable qui n'existe pas -- ici, stack[taille_stack] */
for (int i=0; i<taille_stack; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: "
<< (void*)(stack + i) << endl;
}
return 0;
}
Du coup, la variable "adr" n'est plus utilisée, mais je ne sais pas à
quoi elle sert de toutes façons, vu que c'est un pointeur qui pointe
sur rien. D'ailleurs je ne sais même pas si l'écriture "stack +
taille_stack" est valide...
Note : c'est difficile de dire si c'est vraiment du C++ ou juste du C
habillé en C++, car c'set juste un petit bout de code pour essayer de
comprendre les rouages internes, plus que du code qui fait réellement
quelque chose. Note tout de même que parcourir un tableau avec un
for(int indice...), et donc faire afficher "stack[i]" est assez rare
-- d'ailleurs, si le tableau en question est un std::list<>, ce n'est
même pas possible.
En oubliant les indices, et en n'affichant que la valeur, on peut
s'amuser à remplacer la boucle for() par un :
for_each (stack, stack+taille_stack, AfficheValeurEtAdresse);
avec AfficheValeurEtAdresse défini comme suit :
template <class T> void AfficheValeurEtAdresse (T const& t)
{
cout << t << " a l'adresse " << (void*)(&t) << endl;
}
Note : le "template", loin de compliquer les choses, ou même de tendre
vers la généricité, permet juste de ne pas se préoccuper du type passé
-- et c'est souvent bien agréable, surtout quand le type est un
"std::map <MaClasse::Machin, MonAutreClasse::Truc>::const_iterator"
;-)
On Tue, 18 May 2004 18:37:19 +0200, "Alexandre"
wrote:P.S. c'est du C, pas du C++ ;-)
Ah ?
Plus précisément, un programmeur C++ programmerait ça assez
différemment. Si tu prends du code C, pondu par un programmeur bien
compétent et tout et tout, et que tu remplaces "printf" par "cout" et
"malloc" par "new[]", ça ne donne pas un bon programme C++ -- la
structure du programme reste très typé "C".
Enfin, de toutes façons, si le "#define" fait franchement tache sur
fclc++, même sur fclc il ne me paraîtrait pas génial :
- d'une part, une constante entière conviendrait (je crois) dans les
deux langages, même si j'ai un doute sur la présence de "const" en C ;
- d'autre part, le nom "VALUE" ne convient vraiment pas ;
- enfin, il ne sert pas à grand-chose, surtout qu'il n'est pas
utilisé au seul endroit utile, i.e. dans la boucle for.
Ça pourrait donner un machin du style :
int main ()
{
int stack[] = { 0, 1, 2, 3, 4, 5, 6 };
unsigned int taille_stack= sizeof stack / sizeof *stack;
/* Ou, si on veut faire dans l'illisible ;-) :
unsigned int const taille_stack= sizeof
stack / (sizeof * stack);
*/
//int *adr = &stack[VALUE];
int *adr= stack + taille_stack; /* Je n'aime pas l'idée d'écrire
le nom d'une variable qui n'existe pas -- ici, stack[taille_stack] */
for (int i=0; i<taille_stack; i++)
{
cout << "stack[" << stack[i] << "] at memory adress: "
<< (void*)(stack + i) << endl;
}
return 0;
}
Du coup, la variable "adr" n'est plus utilisée, mais je ne sais pas à
quoi elle sert de toutes façons, vu que c'est un pointeur qui pointe
sur rien. D'ailleurs je ne sais même pas si l'écriture "stack +
taille_stack" est valide...
Note : c'est difficile de dire si c'est vraiment du C++ ou juste du C
habillé en C++, car c'set juste un petit bout de code pour essayer de
comprendre les rouages internes, plus que du code qui fait réellement
quelque chose. Note tout de même que parcourir un tableau avec un
for(int indice...), et donc faire afficher "stack[i]" est assez rare
-- d'ailleurs, si le tableau en question est un std::list<>, ce n'est
même pas possible.
En oubliant les indices, et en n'affichant que la valeur, on peut
s'amuser à remplacer la boucle for() par un :
for_each (stack, stack+taille_stack, AfficheValeurEtAdresse);
avec AfficheValeurEtAdresse défini comme suit :
template <class T> void AfficheValeurEtAdresse (T const& t)
{
cout << t << " a l'adresse " << (void*)(&t) << endl;
}
Note : le "template", loin de compliquer les choses, ou même de tendre
vers la généricité, permet juste de ne pas se préoccuper du type passé
-- et c'est souvent bien agréable, surtout quand le type est un
"std::map <MaClasse::Machin, MonAutreClasse::Truc>::const_iterator"
;-)
En somme, pourquoi faire simple et lisible, quand on peut faire complex
et obfusqué. :-)
En somme, pourquoi faire simple et lisible, quand on peut faire complex
et obfusqué. :-)
En somme, pourquoi faire simple et lisible, quand on peut faire complex
et obfusqué. :-)
drkm writes:
[...]
| Ce qui est très proche du principe d'itérateur de la STL : on
Ce qui est aussi une manière destructurante.
Et une fois qu'on a
réduit tout le monde à des amas linéaire d'atomes et qu'il n'y
a plus d'individualité,
on peut faire passer le buldozer, pardon, les
algorithmes de la STL.
drkm <usenet.fclcxx@fgeorges.org> writes:
[...]
| Ce qui est très proche du principe d'itérateur de la STL : on
Ce qui est aussi une manière destructurante.
Et une fois qu'on a
réduit tout le monde à des amas linéaire d'atomes et qu'il n'y
a plus d'individualité,
on peut faire passer le buldozer, pardon, les
algorithmes de la STL.
drkm writes:
[...]
| Ce qui est très proche du principe d'itérateur de la STL : on
Ce qui est aussi une manière destructurante.
Et une fois qu'on a
réduit tout le monde à des amas linéaire d'atomes et qu'il n'y
a plus d'individualité,
on peut faire passer le buldozer, pardon, les
algorithmes de la STL.