Pointeurs, tableaux, printf

J’essaie d’utiliser un tableau pour contenir des entrées pour une enquête qui aura des valeurs positives égales de chaque côté, mais un pointeur pointera vers le centre du tableau afin que des valeurs de pointeur négatives puissent être utilisées pour accéder au tableau.

Par exemple, le tableau contiendrait des valeurs comsockets entre 0 et 30, le pointeur indiquerait 15 et l’utilisateur serait invité à entrer des valeurs comsockets entre -15 et 15 où le tableau à la valeur de l’utilisateur serait incrémenté.

Je vais bien si ma logique n’est pas encore tout à fait correcte, mais le problème que j’ai actuellement c’est d’incrémenter la valeur (ce que je ne sais pas si je le fais correctement avec ptr[userInput]++ , et d’afficher ces valeurs avec printf . J’ai vu le message de quelqu’un d’autre sur le fait de passer le tableau à printf en passant un pointeur sur le tableau, et cette personne a dit de le dé-référencer deux fois avec **ptr ou (*ptr)[0] , mais mon compilateur (Mac XCode) ne semble pas l’aimer.

Des pensées? Voici mon code. J’ai commenté où étaient mes questions:

 #define ENDPOINT 15 #define TERMINATE 999 #define TEST_FILE "TestFile6.txt" void RecordOpinions(void) { int record[2 * ENDPOINT + 1]; int *ptr = &record[ENDPOINT + 1]; int userInput; int loopCount = -ENDPOINT; printf("ptr:%d\n", *ptr); // this was a test for me trying to figure out how to // print the value of the ptr. printf("Please enter your opinion of the new TV show, Modern Family from "); printf("-%d(worst) to 0 to +%d(best). Entering %d ", ENDPOINT, ENDPOINT, TERMINATE); printf("will terminate and tabulate your results: \n"); scanf("%d", &userInput); while (userInput != TERMINATE) { if (userInput > ENDPOINT || userInput < -ENDPOINT) { printf("Invalid entry. Enter rating again: "); } else { printf("You entered: %d\n", userInput); ptr[userInput]++; // not sure if this is the right way to increment // the array at the user's input value. } scanf("%d", &userInput); } printf("Rating entry terminated.\n"); printf("Ratings:.\n"); for (; loopCount <= ENDPOINT; ) { printf("%d\n", ptr[loopCount++]); // this part is where I also need help // in trying to print out the value of // the ptr, not the address. } } 

En ce qui concerne les problèmes immédiats que vous avez soulevés dans votre question, votre code convient parfaitement. C’est-à-dire que vous travaillez correctement avec votre tableau “à deux faces” (et non, vous n’avez pas besoin de déréférences supplémentaires lorsque vous printf les valeurs du tableau).

Le seul problème que je vois est que vous avez oublié d’initialiser (d’atsortingbuer des valeurs initiales à) votre tableau d’ record , ce qui signifie que la sortie sera de toute façon gênante, quelle que soit la façon dont vous l’utilisez.

De plus, comme Dave Hinton l’a noté dans les commentaires, si vous souhaitez utiliser la -ENDPOINT à +ENDPOINT -ENDPOINT à partir de l’origine ptr , vous devez initialiser votre ptr avec &record[ENDPOINT] , pas avec &record[ENDPOINT + 1] . Sinon, si l’utilisateur entre la valeur ENDPOINT tant qu’index, vous aurez un access hors limites à l’extrémité droite. (Et la valeur de l’ record[0] restra toujours inutilisée du côté gauche.)

PS Je ferais pas mal de changements “stylistiques”, mais ils ne sont pas pertinents dans ce cas.

Pourquoi ne soustrayez-vous pas simplement 15 du nombre saisi par l’utilisateur? C’EST À DIRE

 ptr[userInput - ENDPOINT]++; 

ptr pointe vers le début du tableau? C’est beaucoup plus facile à comprendre et plus conventionnel.