Partially filled array and output variable
Hi everyone. I've got example of partially filled array where two sizes of array are used, declared size and the actual size. What I'm confused about is the output variable *dbl_sizep. Is it pointer to in_use in main function? If it is indeed pointer to in_use variable then why it stands that *dbl_sizep = i if there will be condition in main function that i<in_use?
This is the program I talk about:
I - The fill_to_sentinel function
insert
Code:
1. /*
2. * Gets data to place in dbl_arr until value of sentinel is encountered in
3. * the input.
4. * Returns number of values stored through dbl_sizep.
5. * Stops input prematurely if there are more than dbl_max data values before
6. * the sentinel or if invalid data is encountered.
7. * Pre: sentinel and dbl_max are defined and dbl_max is the declared size
8. * of dbl_arr
9. */
10. void
11. fill_to_sentinel(int dbl_max, /* input - declared size of dbl_arr */
12. double sentinel, /* input - end of data value in
13. input list */
14. double dbl_arr[], /* output - array of data */
15. int *dbl_sizep) /* output - number of data values
16. stored in dbl_arr */
17. {
18. double data;
19. int i, status;
20.
21. /* Sentinel input loop */
22. i = 0;
23. status = scanf("%lf", &data);
24. while (status == 1 && data != sentinel && i < dbl_max) {
25. dbl_arr[i] = data;
26. ++i;
27. status = scanf("%lf", &data);
28. }
29.
30. /* Issues error message on premature exit */
31. if (status != 1) {
32. printf("\n*** Error in data format ***\n");
33. printf("*** Using first %d data values ***\n", i);
34. } else if (data != sentinel) {
35. printf("\n*** Error: too much data before sentinel ***\n");
36. printf("*** Using first %d data values ***\n", i);
37. }
38.
39. /* Sends back size of used portion of array */
40. *dbl_sizep = i;
II - Driver for testing fill_to_sentinel function
insert
Code:
1. /* Driver to test fill_to_sentinel function */
2.
3. #define A_SIZE 20
4. #define SENT -1.0
5.
6. int
7. main(void)
8. {
9. double arr[A_SIZE];
10. int in_use, /* number of elements of arr in use */
11. i;
12.
13. fill_to_sentinel(A_SIZE, SENT, arr, &in_use);
14.
15. printf("List of data values\n");
16. for (i = 0; i < in_use; ++i)
17. printf("%13.3f\n", arr[i]);
18.
19. return (0);
20. }