eroare: argument de tip nevalabil de tip unar ‘*’ (Programare, C++, Array-Uri, Pointeri)

user3502479 a intrebat.

Nu înțeleg aceste erori poate cineva să explice?

eroare: argument de tip nevalabil de tip unar‘ (are ‘double’)error: invalid type argument of unary ‘‘ (have ‘double’)error: invalid type argument of unary ‘*’ (have ‘double’)

    double getMedian(double *array, int *hours){
    if (*hours <= 0) return 0;
    if (*hours % 2) return (float)*array[(*hours + 1) / 2];
    else{int pos = *hours / 2;
    return (float)(*array[pos] + *array[pos + 1]) / 2;}}

3 răspunsuri
ppl

Deja faceți dereferențiere array cu [] operator. Ceea ce doriți este:

double getMedian(double *array, int *hours){
if (*hours <= 0) return 0;
if (*hours % 2) return (float)array[(*hours + 1) / 2];
else{int pos = *hours / 2;
return (float)(array[pos] + array[pos + 1]) / 2;}}

Rețineți că scrierea x[y] este o prescurtare pentru *(x + (y)). În codul dumneavoastră, aveți în esență echivalentul lui **array.

sajas

Când folosiți operatorul [] pe array-uri sau pe pointeri, nu trebuie să le dereferențiați din nou pentru a obține valoarea.puteți spune doar,

if (*hours % 2) return (float)array[(*hours + 1) / 2];

și

return (float)(array[pos] + (array[pos + 1]) / 2);

John3136

*array[(*hours + 1) / 2]; deci array este o matrice de duble. Îl tratați ca pe o matrice 2D pentru că încercați să faceți o singură dată dereferențierea prin * și o dată prin [].

De asemenea, aș adăuga câteva () la toate acestea pentru a fi mai clar, fără a fi nevoie să memorați ordinea operațiilor.