How do you get the index number of an array rather than the element?

802 Views Asked by At

I have written a basic program to find the largest number in an array and print it:

#include <stdio.h>

int main(void)
{
    int numbers[] = {3, 5, 12, 1, 4};
    int largest;

    largest = numbers[0];

    for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++)
    {
        if (largest < numbers[i])
        {
            largest = numbers[i];
        }
    }

    printf("The largest number in the array is %i\n", largest);
}

What would I need to do so that instead of printing The largest number in the array is 12, it prints The largest number in the array is numbers[2]?

3

There are 3 best solutions below

0
On BEST ANSWER

Instead of using the value, you would use the index:

#include <stdio.h>

int main(void)
{
    int numbers[] = { 3, 5, 12, 1, 4 };
    int largest;

    largest = 0;

    for (int i = 1; i < sizeof(numbers) / sizeof(numbers[0]); i++)
    {
        if (numbers[largest] < numbers[i])
        {
            largest = i;
        }
    }

    printf("The largest number in the array is numbers[%d]\n", largest);
    return 0;
}
0
On

One way of doing it is tracking the index

#include <stdio.h>

int main(void)
{
    int numbers[] = {3, 5, 12, 1, 4};
    int largest;
    int index = 0;

    largest = numbers[0];

    for (int i = 0; i < sizeof(numbers) / sizeof(numbers[0]); i++)
    {
        if (largest < numbers[i])
        {
            largest = numbers[i];
            index   = i;
        }
    }

    printf("The largest number in the array is %d at numbers[%d]\n", largest,index);
    return 0;
}
2
On

I would do something like:

#include <stdio.h>

int
main(void)
{
        int numbers[] = {3, 5, 12, 1, 4};
        int *largest = numbers;
        int *end = numbers + sizeof numbers / sizeof *numbers;

        for(int *s = numbers; s < end; s++ ){
                if( *s > *largest) {
                        largest = s;
                }
        }
        printf("The largest number in the array is %d, at position %td\n",
                 *largest, largest - numbers);
}