2016-11-03 2 views
-1
// function t find the max value entered in the array 
    double max(double *n,int size) 
    { 
     int i,k=0; 
     double *maxi; 
     maxi=&k; 

     for(i=0;i<size;i++) 
     { 
      if(*maxi<n[i]) 
      { 
       maxi=&n[i]; 
      } 
     } 
     return *maxi; 
    } 
//elements of array are added 
    main() 
    { 
     double a[10000],maxi; 
     int size,i; 
     printf("enter the size of the array"); 
     scanf("%d",&size); 
     printf("enter the elements of array"); 
     for(i=0;i<size;i++) 
     { 
      scanf("%lf",&a[i]); 
     } 
     maxi=max(&a,size); 
     printf("maximum value is %lf",maxi); 
    } 

Warum wird der Zeiger in der Funktion max nicht de-referenziert? Wenn ich den Zeiger n de-referenziere gibt es einen Fehler. Wenn es eine bessere Möglichkeit gibt, dies zu tun, schlagen Sie bitte vor.Warum wird der Zeiger in der Funktion max nicht de-referenziert?

+0

_It gibt eine error_ nicht eine sehr hilfreiche Beschreibung ist, geben Sie bitte Ihre Frage auszuarbeiten und eine [MCVE] bieten. –

+0

Es gibt eine kleine Diskrepanz in Ihrem Aufruf 'max (& a, size)', die wahrscheinlich eine Compiler-Warnung gibt. Es sollte entweder 'max (a, size)' oder 'max (& a [0], size) 'sein. Beide übergeben einen Zeiger auf das erste Element des Arrays (das ist der korrekte Zeigertyp "double *"), anstatt einen Zeiger auf das ganze Array zu übergeben (was der falsche Zeigertyp ist double (*) [10000] '). –

Antwort

0

n[i] ist die gleiche Sache wie *(n + i). Daher wird der Zeiger durch die [] -Syntax de-referenziert.

Warum Sie einen Fehler erhalten, ist es unmöglich zu sagen, ohne dass Sie den problematischen Code veröffentlichen.

+0

Aber beachte, dass '&n[i];' den Zeiger nicht wirklich * referenziert *. C * muss * dies als "n + i" auswerten. – Bathsheba

0

Das Übergeben des Arrays/Zeigers als Argument und Dereferenzierung sind beide falsch. Folgende

maxi=max(&a,size); // passing address of the address 

if(*maxi<n[i]) // k is compared to memory garbage 

maxi=&n[i]; // maxi is assigned with memory garbage 

Bedenken Sie:

double max(double * na, int size) // n changed to na 
{ 
    int idx; // changed i to idx; 
    double max; // forget about k and maxi, just simply max 
    if(0 < size) 
    { 
     max = na[0]; // init max to 1st elem 
     for(idx = 1; idx < size; ++idx) // iterate from 2nd elem 
     { 
      if(max < na[idx]) { max = na[idx]; } // check for larger 
     } 
    } 
    return max; 
} 

int main() 
{ 
    double an[10000],maxi; // a changed to an 
    // .. 
    maxi = max(an, size); // pass an not &an 
    // .. 
    return 0; 
} 
Verwandte Themen