Denna slumpar ett antal tal samt skriver ut dessa. Nu vill jag räkna ut Maxvärdet med hjälp av en pekare. När den har loopat igenom arrayen ska den peka på det största slumpade talet som finns i arrayen.
sum ska inte vara en pekare, det ska vara en int. Som du gör nu tar du adressen till första elementet i v och lägger i sum, och försöker sen loopa över v och lägga till adressen till varje element till sum. Det är inte vettigt att försöka addera två pekare (pekare + int går dock bra, det är ungefär samma sak som att indexera i en array).
Dessutom är int *pekare = &array[0] bara är en onödigt lång version av int *pekare = array eftersom en pekare och en array är samma sak.
int sum = 0;
for (int *p = v; p < v + size; ++p)
sum += *p;
En liten sak jag tänkte på.
Om man vill att min utskrift ska stoppas för var 200:e element som innehåller de slumpade talen.
Hur skulle man kunna lösa det?
Har följande kod:
har fått ett litet problem med mina pekare, igen :r
har följande kod:
int *max = v[0];
int *min = v[0];
int sum = 0;
for (int *p = v; p < v + size; ++p)
{
if (*p > *max)
{
*max = *p;
}
if (*p < *min)
{
*min = *p;
}
sum+=*p;
}
men får felmeddelandet:
'initializing' : cannot convert from 'int' to 'int *'
Du deklarerar max och min som int*, men du initierar dem till vanliga int:ar (eftersom v[0] är en avreferering av en pekare). Antingen får du göra dem till vanliga int:ar, eller så får du låta dem peka på något istället. Dessutom skulle du i ditt nuvarande sätt skriva över v[0] med såväl det största som det minsta talet :)
[i]variant 1 - använd int:ar[/i]
int max = v[0];
int min = v[0];
int sum = 0;
for (int *p = v; p < v + size; ++p)
{
if (*p > max)
max = *p;
if (*p < min)
min = *p;
sum+=*p;
}
[i]variant 2 - använd pekare på riktigt sätt[/i]
int *max = NULL;
int *min = NULL;
int sum = 0;
for (int *p = v; p < v + size; ++p)
{
if (!max || *p > *max)
max = p;
if (!min || *p < *min)
min = p;
sum+=*p;
}
(!max och !min är ekvivalent med max == NULL resp. min == NULL)
En fin sak med nummer två är att den dessutom funkar bra även om size råkar vara 0, vilket inte ettan gör. Om så är fallet är pekarna max och min NULL när loopen är slut, annars pekar de på elementen i v som störst resp. minst värde.