English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Toutes les catégories

int a[SIZE][SIZE],

Int occupe 4 octets et SIZE vaut 64.

Comment peut-on mettre un tableau de 64 col X 64 li dans 4 octets soit 32 bits ?

2007-02-08 23:59:45 · 6 réponses · demandé par jlo 1 dans Informatique et internet Programmation

6 réponses

Je ne sais pas quel est le langage.
En C, cette ligne correspond à allouer un tableau de 64x64 int = 4096 int = 16384 octets qui seront tous consécutifs.
a n'est alors qu'un pointeur qui référence la zone mémoire où ont été alloués ces 16384 octets.
Il s'agit donc d'une adresse, adresse qui est (en général, ça dépend du processeur et/ou du système d'exploitation) stocké sur 4 octets (32 bits).
Tu as donc dans ta mémoire :
- une zone de 16384 octets
- une zone de 4 octets qui contient l'adresse de la zone précédente
Ces deux zones sont potentiellement totalement disjointes.

Le principe peut être différent dans d'autre langages où ta ligne de commande coresspondra à allouer 64 tableaux de 64 int = 256 octets et un tableau de 64 pointeurs, chaque pointeur référençant la zone mémoire où se trouve chacun des 64 tableau précédents. a est alors un pointeur vers ce dernier tableau de 64 pointeurs, donc a est en régle générale stocké sur 4 octets.

Donc dans tous les cas, a n'est qu'un pointeur vers quelque chose, il s'agit uniquement d'une adresse !

Edit :
Pour répondre à gary_lafayette, je ne connais pas en effet l'implémentation dans tous les langages. Mais dans la majorité des cas, a sera considéré comme un pointeur.
Dans la cas spécifique du C, la ligne de commande correspond en fait à
void* a = malloc(64*64*sizeof(int)) ;
il s'agit donc bien d'un pointeur.

2007-02-09 00:26:48 · answer #1 · answered by Anonymous · 1 1

Tu as un tableau d'entier (int) à deux dimensions (SIZE X SIZE) et c'est chaque case du tableau qui est un int , en fait ta variable a est de type int** donc il pointe juste sur la première case du tableau donc aucun problème. a = &a[0][0] .

2007-02-09 02:25:19 · answer #2 · answered by CHANFANK 2 · 0 0

Si mes souvenirs sont bons, a n'est que le pointeur vers le tableau SIZE * SIZE. a n'occupe donc que 4 octets.

2007-02-09 00:11:43 · answer #3 · answered by wiwi 2 · 1 1

Ce que tu as écrit crée un tableau à deux dimensions. Chaque valeur du tableau est un entier sur 4 octets. Le nombre d'éléments est SIZE x SIZE.
a n'est pas un entier mais un tableau d'entiers.

Donc la taille de ton tableau, c'est la taille d'un élément (en octets) multiplié par le nombre d'éléments : sizeof(a) == sizeof(&a[0]) x SIZE x SIZE.

N'écoute pas ceux au dessus, a n'est PAS un pointeur. Fais un printf de sizeof(a), tu verras que j'ai raison.

2007-02-09 00:32:21 · answer #4 · answered by gary_lafayette 4 · 0 1

Quand tu crées un tableau en langage C la variable permettant d'y accéder est en fait un pointeur.
Or un pointeur occupe 4 octets sur la plupart des architectures.

Donc ici a est pointeur sur une zone de 64 cases, chacune étant elle-même un pointeur vers un tableau de 64 cases.
D'où sizeof(a) = 4, sizeof(*a) = sizeof(a[0]) = 4,
sizeof (**a) = sizeof(a[0][0]) = sizeof(int) (probablement 4 aussi mais ça dépend de la machine)

Hélas il n'y a pas moyen d'utiliser sizeof pour trouver la taille de la zone complète. Il faut donc bien la calculer soi-même pour ne pas se tromper lors des affectations!

2007-02-09 00:15:08 · answer #5 · answered by t_cordonnier 7 · 0 1

En fait tu crées un tableau de pointeurs. Chaque élément de ce tableau est l'adresse du 1er élément d'un tableau à une dimension de 64 éléments.

2007-02-09 00:12:32 · answer #6 · answered by guy_from_darkness 6 · 0 2

fedest.com, questions and answers