Je suis très gentil avec C Lang et travaille sur un projet que j'ai été coincé. Voici mon code ci-dessous } p> Je voudrais faire des choses avec la variable de pointeur PT. J'essaie d'avoir accès à l'emplacement de la mémoire du premier élément de mon structure ARR afin que je puisse passer à travers le tableau et afficher tout. Je comprends que cela pourrait être plus simple de ne pas utiliser de pointeurs dans ce cas, mais je vais utiliser ce code entre les fichiers, donc je pensais que cela faciliterait le processus plus facile sur la route. P> P>
4 Réponses :
Voici quelques mises à jour qui pourraient vous rapprocher de ce que vous recherchez:
person *pt = y[0]; printf ("this is addr %p\n", y[0]); printf ("this is pt %p\n", pt); for (int i = 0; i < 5; i++) { person current = *pt; printf ("%d\n", current.age); printf ("%d\n", current.zipcode); pt += 1; }
Si vous demandez comment itération sur les champs d'une structure, vous ne pouvez pas faire cela. Mais puisque
Si vous demandez comment itérer sur les éléments du tableau que vous avez créé, lisez activé. P>
Si vous avez un tableau P>
person array[5] = { { .age = 45, .zipcode = 45035 }, ... }; for (person *p=array, int i=0; i<5; ++pt, ++i) { printf("%d\n", p->age); printf("%d\n", p->zipcode); }
Vous voulez vraiment [probablement] ne voulez pas le niveau supplémentaire d'indirection. Il va améliorer mieux si vous le gardez simple
vous ne pouvez pas itérer avec Voici une version simplifiée. En tant que torsion, j'ai ajouté une "extrémité de table" sentinelle (par exemple une entrée avec un code postal code> de zéro): p> Bonjour Craig, comment allais-je ajouter à mon tableau de struct alors que je vais au lieu de savoir à l'avance, comme vous l'avez fait? P>
blockQquote> Bien que, nous aurait pu utiliser l'approche Sentinel, pour cela, il est préférable de gérer le nombre de participants et d'utiliser Nous devons changer les personnes Voici une version simple: p> ce qui précède fait un Il y a une amélioration pour utiliser une deuxième variable de comptage qui maintient la trace de la taille "allouée" contre le nombre "utilisé". éléments. Cela nous permet de réduire le nombre de int * pt code>. Il ne compilera même pas parce que vous utilisez un pointeur
int code> pour interdire via un tableau de
personne code> les pointeurs em> [I.e. Indirection supplémentaire]. P>
< p>
realloc code> pour agrandir le Liste. P>
code> global sur un pointeur em>. Et, la boucle d'impression doit changer. P>
realloc Code> pour chaque em>
addPerson code> appel.
MALLOC / RELAYLOC CODE> Peut être un peu coûteux. p>
realloc code> appels: p>
Salut Craig, comment allais-je ajouter à mon tableau de struct alors que je vais au lieu de savoir à l'avance, comme si vous avez fait?
Tout d'abord, soyez très prudent. Si personne code> a déjà un membre qui est une taille différente de l'int, la structure peut être "rembourrée" avec des octets vides, et ce rembourrage peut être différent en fonction de l'ordre des membres dans la structure. Si vous êtes très sûr que cette structure ne changera jamais, vous pouvez déclarer un
int * code> au début de votre matrice de structure et accéder aux membres individuels à l'aide du pointeur IE: P>
person peopleArray[40];
int *atribPtr = (int*)peopleArray;
for(int i=0; i < sizeof(peopleArray); i++){
doAgeStuff(atribPtr[2*i]);
doZipStuff(atribPtr[2*i + 1]);
}
Bienvenue dans le débordement de pile. Savez-vous comment itération via un tableau d'un type primitif comme
int code>?
Conseil: si vous utilisez des mots capitalisés pour des types tels que code> personne code>, vous pouvez définir des noms avec des noms sensibles plus facilement (par exemple
personne personne code>)
@Beta oui je fais et ikegami, merci pour le conseil, je garderai à l'esprit la prochaine fois que je crée une structure