Pourquoi dans un tableau "int" les adresses des valeurs vont de 4 en 4? :aie:
Version imprimable
Pourquoi dans un tableau "int" les adresses des valeurs vont de 4 en 4? :aie:
C'est plutôt logique. 4 correspond simplement à la taille du int.
Si tu as une armoire avec plusieurs tiroirs côte à côte où chaque tiroir fait 10cm de long, le premier se trouve à 0 cm à partir du bord. Le second se trouvera à 10cm, et le troisième à 20cm. C'est pareil en mémoire.
Parce que la taille d'un int, du moins sur ta machine, est 4 (4 octets). Si donc dans un tableau tu as un un élément qui se trouve à l'adresse 1000 par exemple, le prochain élément se trouve à l'adresse 1004.
Ce que je comprends pas ce que dans le tuto il est dit : chaque case mémoire contient un octet c'est-à-dire huit bits donc j'en conclus qu'un "int" (4 octets) contient 4 cases et c'est la 1ere cases qui contient l'adresse et c'est pour cela que les adresse vont de 4 en 4..
C'est ça ou pas?
Non. Il n'y a pas de case qui « contienne l'adresse » (sauf quand tu utilises un pointeur). La mémoire d'un ordinateur peut être vue comme un immense tableau d'octets consécutifs et on accède à chacun d'eux en donnant son numéro.
En C, maintenant, quand on passe l'adresse d'un tableau, d'une structure, d'un entier, et d'une manière générale de quoi que ce soit qui mesure plus d'un octet, on donne l'adresse du premier octet en mémoire, de la même façon que l'index d'un livre te renvoie toujours au début d'un chapitre, même si celui-ci fait plusieurs pages.
Dans le cas d'un tableau en particulier : un tableau est une suite consécutive d'éléments du même type. Tous les éléments ont donc la même taille. Pour connaître l'emplacement en mémoire d'un élément, il faut donc connaître l'emplacement du tableau (l'adresse de base) et y ajouter le numéro de ton élément multiplié par sa taille (l'offset).
Bonjour,
L'octet est le minimum adressable, c'est à dire que quand on part d'une adresse et que l'on incrémente cette adresse de 1, alors on a parcouru 1 octet.
C'est différent de l'arithmétique de pointeur ou un "+1" peut , suivant le type, ajouter plus de 1 à l'adresse:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 int main(int argc, char* argv[]) { int ti[] = {41, 42}; char tc[] = {'A', 'B'}; int * pti = &ti[0]; char * ptc = &tc[0]; printf("ti[0]: %d; &ti[0]: %p\n", *pti, pti); printf("tc[0]: %c; &tc[0]: %p\n", *ptc, ptc); pti++; ptc++; printf("ti[1]: %d; &ti[1]: %p\n", *pti, pti); printf("tc[1]: %c; &tc[1]: %p\n", *ptc, ptc); return 0; }
Sortie du programme:
Passer du premier élément (index 0) au deuxième élément d'un tableau d'entier (int), sur mon architecture, ajoute 4 au pointeur: de 0x53F9E8 à 0x53F9EC (0x53F9EC - 0x53F9E8 = 4).Citation:
ti[0]: 41; &ti[0]: 0053F9E8
tc[0]: A; &tc[0]: 0053F9DC
ti[1]: 42; &ti[1]: 0053F9EC
tc[1]: B; &tc[1]: 0053F9DD
Passer du premier élément (index 0) au deuxième élément d'un tableau de caractère (char), sur mon architecture, ajoute seulement 1 au pointeur:
de 0x53F9DC à 0x53F9DD (0x53F9DD - 0x53F9DC = 1).
Sur mon architecture, un entier occupe 4 octet, et un caractère 1 seul.
Merci j'ai compris vos explications...;) mais moi je veux savoir si 4 octets représente 4 cases ? (car 1 octet représente 1 case)
mdr.. ben oui j'ai pas compris... donc je veux savoir si 4 octets représente 4 cases ? (car 1 octet représente 1 case)
Si une baguette de pain coûte un euro, combien coûteront 10 baguettes ? ;)
Je vois pas la rapport.. bref.. merci a vous..
on parle de "case" dans un tableau, une "case" du tableau fait la longueur des variables qui le composent. ex int tab[10] contient dix cases.
Si tu fais un tableau d'int (et que les int font 4 octets sur ta machine, comme pour la plupart), une case = 4 octets dans ce cas.
toi tu parles des différentes adresses mémoire, il ne faut pas les appeler des "cases".
Merci Pacorabanix c'est plus clair.. mais pourquoi dans un tableau de int de 4 octets les adresses des valeurs vont de 4 en 4 car comme tu dit une case = 4 octets dans cas ?
Avec un dessin, ce sera peut-être plus clair :
Si ton tableau commence au tout début de la mémoire, et que chaque case occupe quatre octets (parce qu'elle contient un int), alors la première case va occuper les octets 0, 1, 2 et 3, la case suivante les octets 4, 5, 6 et 7, celle d'après les octets 8, 9, 10 et 11, et ainsi de suite.Code:
1
2
3
4 Adresse en mémoire : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16... +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-- Cases de ton tableau : | Case n° 0 | Case n° 1 | Case n° 2 | Case n° 3 | ... +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--
Il y a apparemment une grosse confusion provoquée par le fait qu'on parle à la fois de "case mémoire" et "case tableau", voire de "case" tout court.
Le mieux, ce serait d'utiliser le terme de "élément" pour désigner une "case tableau".
C'est peut-être pour cela que lassault1 s'y perd. :lol:
C'était simplement une manière un peu ironique de la part de te faire comprendre que la réponse était dans ta question.Citation:
Je vois pas la rapport.. bref.. merci a vous..
Tu demandais ceci :Si 1 case (mémoire) fait 1 octet, alors 4 cases (mémoire) feront donc logiquement 4 octets aussi... tout comme (mon exemple) si une baguette coûte 1 euro, alors 10 baguettes en coûteront 10.Citation:
donc je veux savoir si 4 octets représente 4 cases ? (car 1 octet représente 1 case)
Par "case", tu parlais de "case mémoire" ou de "case tableau" (terme adéquat : "élément") ? :oops:
Merci a vous.. c'est + clair..:)
Obsidian tu peut mette dans ton schéma les adresses de chaque cases de 4 octets afin de mieux comprendre? :ccool:
Oui désolé j'ai mal vu...
obsidian voulait direSi j'ai bien compris alors quand on demande l'adresse de Case n° 0 c'est 0 , l'adresse de Case n° 1 c'est 4 et l'adresse de Case n° 2 c'est 8, ect.. ect..Citation:
... alors la première case va occuper les octets de l'adresse 0, 1, 2 et 3
C'est ça ou pas?
Merci a vous c'est résolu :ccool::ccool::ccool::ccool::ccool::ccool: