Adresse de tableau contre l'adresse de tableau[0] - langage C
Ma question est pourquoi l'adresse d'un tableau différer de l'adresse de sa première position?
Je suis en train d'écrire mon propre malloc, mais pour commencer, je suis juste en allouant une partie de la mémoire et de jouer avec les adresses. Mon code ressemble à peu près comme ceci:
#define BUFF_SIZE 1024
static char *mallocbuff;
int main(){
mallocbuff = malloc(BUFF_SIZE);
printf("The address of mallocbuff is %d\n", &mallocbuff);
printf("The address of mallocbuff[0] is %d\n", &mallocbuff[0]);
}
&mallocbuff est la même adresse à chaque fois que je le lance. &mallocbuff[0] est un hasard de l'adresse à chaque fois. Je m'attendais à de la adresses correspondent les uns aux autres. Quelqu'un peut-il expliquer pourquoi ce n'est pas le cas?
La matrice ne sont pas toujours équivalentes à des pointeurs, et vice versa..
N'utilisez pas de
N'utilisez pas de
%d
pour imprimer une adresse. Utilisation %p
, et à lancer les adresse à void*
: printf("%p\n", (void*)&whatever);
OriginalL'auteur GetOffMyLawn | 2010-04-24
Vous devez vous connecter pour publier un commentaire.
&mallocbuff
est l'adresse de la variable nomméemallocbuff
.&mallocbuff[0]
est l'adresse du premier élément dans le tampon pointé parmallocbuff
, que vous avez alloué àmalloc()
.Il est probablement trop tard pour moi. Merci pour la correction moi dans mon post.
OriginalL'auteur
mallocbuff n'est pas un tableau, c'est un pointeur. Il est stocké complètement différent de celui où malloc alloue.
Ce serait lui donner les résultats que vous attendez (et nécessaire):
De sortie:
OriginalL'auteur
Lorsque vous prenez l'adresse de
mallocbuf
(via&mallocbuf
) vous êtes de ne pas obtenir l'adresse de la table - vous d'obtenir l'adresse d'une variable qui pointe vers le tableau.Si vous voulez l'adresse du tableau d'utilisation
mallocbuf
lui-même (dans la premièreprintf()
). Ce sera le retour de la même valeur que&mallocbuf[0]
OriginalL'auteur Itay Maman