15,029,771 members
See more:
Anybody help asap !!!
I am unable to calculate the largest index at which the maximum value appears in an array x[n] of n integers.

What I have tried:

```int lastMax(int n, int x[n]) {
if (n<=0) {
return -1; }
int max = x[0];
int maxIndex = 0;
for (int i = 1;i <n; i++) {
if (x[i] > max) {
maxIndex = i;
max = x[i];
}
}
return maxIndex;
}
/*** DO NOT MODIFY BELOW THIS LINE ***/

#include <stdio.h>
#include <stdlib.h>

int main() {
int n;
scanf("%d", &n);
int *x = NULL;
if (n > 0) {
x = (int *) malloc(n * sizeof(int));
if (x != NULL) {
for (int i = 0; i < n; ++i) {
scanf("%d", &x[i]);
}
}
}
printf("%d\n", lastMax(n, x));
if (x != NULL) {
free(x);
}
return 0;
}```
Posted
Updated 11-Jan-21 10:30am
k5054 11-Jan-21 15:57pm

In what way does this not work?
Why "Do not modify below this line" ??
I think it would be helpful if you did something like:
```int maxIndex = lastMax(n, x);
printf("Max value: x[%d] = %d\n", maxIndex, x[maxIndex]);```

But you should probably test that maxIndex is not -1 first.
Shri_hari 11-Jan-21 22:29pm

It calculates the index of largest number but if the largest number is present at more than one position say 2 3 4 4 then I should get output as 3 and not 2.
But it is not doing that part properly ..!

## Solution 1

Change the definition of your function to:
C++
`int lastMax(int n, int* x) {  // x is a pointer to an array`

## Solution 2

To add to what Richard has said: the C Language Specification defines that the name of an array variable is a pointer to its first element.
So given this:
C++
`int arr[10];`

These two statements are equivalent:
C++
`int *p1 = arr;`

C++
`int *p2 = &(arr[0]);`

This means that it is legal to treat any pointer to a type as an indexable array of that type - so passing an array to a function is done by declaring the parameter as a pointer, and then using an index within the function to access individual elements;
C++
```void PrintArray(int *arr, int n)
{
for (int i = 0; i < n; i++)
{
printf("%u\n", arr[i]);
}
}```
Or as a pointer:
C++
```void PrintArray(int *arr, int n)
{
while(n-- > 0)
{
printf("%u\n", *arr++);
}
}```
In either case, you can hand the array and it's size, and the function will work:
C++
```int myArray[10];
PrintArray(myArray, 10);```
Shri_hari 11-Jan-21 22:37pm

What you are saying is right.
But how does that solve my problem of not being able to calculate "largest index of largest number in array".
I couldn't understand. Clarify this if possible.
OriginalGriff 12-Jan-21 2:43am

You know how to find the largest value, yes?