Skip to content

Instantly share code, notes, and snippets.

@jelmervdl
Created February 20, 2012 21:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jelmervdl/1871716 to your computer and use it in GitHub Desktop.
Save jelmervdl/1871716 to your computer and use it in GitHub Desktop.
Voorbeeldje van C-code waarin pointers worden gebruikt om resultaten terug te geven
#include <stdio.h>
#include <stdlib.h>
void find_char(char what, char *letters, int letters_size, int **positions, int *positions_size)
{
int i;
int hits = 0;
/*tel aantal maal dat letter voorkomt om te bepalen hoeveel posities we moeten reserveren.*/
for (i = 0; i < letters_size; ++i)
if (letters[i] == what)
hits++;
*positions_size = hits;
/* geen reden om verder te gaan en geheugen te alloceren als er toch geen hits zijn. */
if (!hits)
return;
/* alloceer geheugen, en schrijf de positie van het begin van dat
geheugen naar de pointer waar de pointer positions naar verwijst. */
*positions = malloc(sizeof(int) * hits);
/* reset teller, deze ga ik gebruiken om m'n index voor positions bij te houden. */
hits = 0;
for (i = 0; i < letters_size; ++i)
if (letters[i] == what)
/* dereference de posities pointer en we krijgen de lijst, en neem dan het
n-de element uit die lijst, schrijf i daarheen. */
(*positions)[hits++] = i;
}
int main(int argc, char **argv)
{
char letters[] = "Lorem ipsum dolor sit amet, consectetur adipisicing elit,"
" sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris "
"nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in "
"reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla "
"pariatur. Excepteur sint occaecat cupidatat non proident, sunt in "
"culpa qui officia deserunt mollit anim id est laborum.";
int *positions, pos_size, i;
/* argumenten:
- letter,
- de letters,
- aantal letters,
- pointer naar een pointer waar de gevonden posities worden opgeslagen,
- pointer naar een int die het aantal gevonden posities aangeeft. */
find_char('e', letters, sizeof(letters) / sizeof(char), &positions, &pos_size);
printf("Letter e komt %d maal voor op de posities:", pos_size);
for (i = 0; i < pos_size; ++i)
printf(" %d", positions[i]);
printf("\n");
/* geheugen dat find_char heeft gealloceerd (als pos_size > 0 was) vrijgeven */
if (pos_size > 0)
free(positions);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment