The following program shows how you can pass a pointer to a function and change the value of the object the pointer points to:
/*************************************************************** ** This program accepts a value for a timer, then decreases ** ** this timer value by one each time the function count_down ** ** is called. ** ***************************************************************/ #include <stdio.h> int count_down(int *timer) int main(void) { int t_timer; /* local storage */ printf("Set timer to: _ \n"); scanf("%d", &t_timer); if (t_timer <= 0) printf("Timer was set to a negative value\n"); else { while ( count_down(&t_timer) ) /* while timer not zero */ { printf("Timer still counting. %d\n", t_timer); } printf("Timer has reached zero.\n"); } } /* End main */ </pre>
/*************************************************************** ** This function decreases the value of timer by decrements ** ** of 1 and returns false when the timer reaches zero. ** ***************************************************************/ int count_down(int *timer) /* receives a copy of a pointer to t_timer */ { return(--*timer); /* modifying t_timer in main */ } /* End count_down */
Interaction with this program could produce the following sessions:
Output Set timer to: _ Input 6 Output Timer still counting. 5
Timer still counting. 4
Timer still counting. 3
Timer still counting. 2
Timer still counting. 1
Timer has reached zero.
The following program contains pointer arrays:
/************************************************************** ** Program to search for the first occurrence of a specified ** ** character string in an array of character strings. ** **************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE 20 #define EXIT_FAILURE 999 int main(void) { static char *names[ ] = { "Jim", "Amy", "Mark", "Sue", NULL }; char * find_name(char **, char *); char new_name[SIZE], *name_pointer; printf("Enter name to be searched.\n"); scanf("%s", new_name); name_pointer = find_name(names, new_name); printf("name %s%sfound\n", new_name, (name_pointer == NULL) ? " not " : " "); exit(EXIT_FAILURE); } /* End of main *//************************************************************* ** Function find_name. This function searches an array ** ** of names to see if a given name already exists in the ** ** array. It returns a pointer to the name or NULL if ** ** the name is not found. ** ** ** ** char **arry is a pointer to arrays of pointers whose ** ** names already exist. ** ** ** ** char *strng is a pointer to character array entered ** *************************************************************/ char * find_name(char **arry, char *strng) { for (; *arry != NULL; arry++) /* for each name */ { if (strcmp(*arry, strng) == 0) /* if strings match */ return(*arry); /* found it! */ } return(*arry); /* return the pointer */ } /* End of find_name */
Interaction with this program could produce the following sessions:
Output Enter name to be searched. Input Mark Output name Mark found
or:
Output Enter name to be searched._ Input Deborah Output name Deborah not found